У меня есть класс с несколькими методами. Для этих методов я создаю юнит-тесты с использованием MSTest.
public class Class1
{
public virtual async Task<bool> GetData()
{
string var1 ="dsfs", var2 ="eer";
bool retVal = await DoSomething(var1, var2);
// some business logic
return true;
}
public virtual async Task<bool> DoSomething(string var1, string var2)
{
return true;
}
}
Контрольные примеры для метода GetData()
выглядят следующим образом.
[TestClass()]
public class Class1Test
{
[TestMethod()]
public async Task GetDataTest()
{
var mockService = new Mock<Class1>();
var isTrue = ReturnTrue(); // this function returns true
mockService.Setup(x => x.DoSomething(It.IsAny<string>(), It.IsAny<string>())).Returns(isTrue);
var result = await mockService.Object.GetData();
Assert.IsTrue(result);
}
}
Теперь проблема, с которой я сталкиваюсь,
var result = await mockService.Object.GetData();
С этой строки элемент управления не переходит к фактическому методу GetData()
в Class1
. Если я удаляю ключевое слово virtual
из определения метода, тогда элемент управления переходит к методу, т. Е. Если я создаю метод следующим образом.
public async Task<bool> GetData()
{
bool retVal = await DoSomething(var1, var2);
// some business logic
return true;
}
Мне нужно сделать этот метод виртуальным, потому что этот метод вызывается в каком-то другом методе, скажем "XYZMethod
", и для написания тестового примера "XYZMethod" я смоделировал метод GetData()
.
Так что, в любом случае, я могу решить эту проблему, не удаляя виртуальное ключевое слово.
PS: Написание интерфейсов не вариант, так как это очень тяжелый код, над которым я работаю, и знакомство с интерфейсом на данном этапе нецелесообразно.