@ Paul'un cevabının tavsiye edilen yol olduğunu kabul etsem de, sadece kendim tarafından sağlanan alternatif bir yol eklemek istiyorum moq
.
Yana SomeClass
olduğunu abstract
gerçekten mockable, ama public void SomeMehod()
değil. Mesele, bu yöntemi alay etmenin ve bir şekilde bu yöntemi çağırmanın ve ardından CallBase
çağrıyı SomeOtherMethod()
. Bir saldırı gibi gelebilir ama özünde basittir. Önerilen yeniden düzenleme işleminin mümkün olmadığı durumlarda kullanılabilir.
// This class is used only for test and purpose is make SomeMethod mockable
public abstract class DummyClass : SomeClass
{
public virtual void DummyMethod() => base.SomeMethod();
}
Ardından DummyMethod()
, CallBase
bayrağı ayarlayarak çağrıyı yaymak için ayarlayabilirsiniz .
//Arrange
var mock = new Mock<DummyClass>();
mock.Setup(m => m.DummyMethod()).CallBase();
//Act
mock.Object.SomeMethod();
//Assert
mock.Verify(m => m.SomeOtherMethod(), Times.Once);