У меня есть класс следующим образом.
public class MyClass
{
public MyMethod()
{
int x = CalculateSomething();
}
private int CalculateSomething()
{
// Do something and return an int
return 100;
}
}
Для модульного тестирования я добавил [assembly: InternalsVisibleTo("MyTests")]
и изменил закрытый метод на внутренний виртуальный.В проекте модульного теста я создал класс MockMyClass
и создал закрытый метод следующим образом.
public class MockMyClass : MyClass
{
public bool MadeHappyNoise {get; set;}
internal override int CalculateSomething()
{
MadeHappyNoise = true;
return base.CalculateSomething();
}
}
Теперь модульный тест выглядит следующим образом:
[TestMethod()]
public void WasCalculateSomethingCalledOK()
{
MockMyClass mk = new MockMyClass();
mk.MyMethod();
Assert.IsTrue(mk.MadeHappyNoise, "Oops...CalculateSomething not called...");
}
Несколько вопросов:хороший способ удалить зависимости?Лично я не люблю менять метод с частного на внутренний, но у меня нет выбора (кроме использования Reflection, возможно).Кроме того, атрибут InternalsVisibleTo («MyTests»), находящийся в производственном коде, не подходит.Может кто-нибудь указать мне на лучшее решение, пожалуйста?Спасибо.