У меня есть простой пример, в котором я хотел бы проверить, вызывается ли метод в том же классе, что и вызывающий метод:
public class MyClass
{
public void SomeMethod()
{
SomeSubMethod();
}
public virtual void SomeSubMethod()
{
// do a lot of weird stuff
}
}
public class UnitTest1
{
[Fact]
public void Test1()
{
var target = Substitute.ForPartsOf<MyClass>();
target.Configure().SomeSubMethod(); // <---- please just do nothing
target.SomeMethod();
target.Received(1).SomeSubMethod();
}
}
Моя проблема в том, что SomeSubMethod
фактически вызывается в модульное тестирование, и в моем реальном коде я бы хотел этого избежать.
Простой обходной путь - позволить SomeSubMethod
вернуть что-то, но теперь я загрязняю свой реальный код
public class MyClass
{
public void SomeMethod()
{
SomeSubMethod();
}
public virtual int SomeSubMethod()
{
// do a lot of weird stuff
return 0;
}
}
public class UnitTest1
{
[Fact]
public void Test1()
{
var target = Substitute.ForPartsOf<MyClass>();
target.Configure().SomeSubMethod().Returns(0); // <--- Now the real SomeSubMethod won't be invoked
target.SomeMethod();
target.Received(1).SomeSubMethod();
}
}
Есть ли способ настроить метод void, чтобы он ничего не делал?
Ваш / Петр