У меня есть следующий код:
public interface Iinterface
{
Task<bool> RetrieveFromDataBase();
}
public class Class1 : Iinterface
{
public async Task<bool> RetrieveFromDataBase()
{
//do something
return true;
}
}
public class AnotherClass
{
Class1 c = new Class1();
public AnotherClass(Class1 obj)
{
c = obj;
}
public async Task<bool> ExecuteData()
{
var result = await c.RetrieveFromDataBase();
if (result)
{
//do some calculation
}
return true;
}
}
Теперь я пытаюсь написать контрольные примеры для метода ExecuteData
.В этом методе мне нужно обойти RetrieveFromDataBase
метод.Поэтому я пытаюсь это высмеять.Ниже приведен код, который я написал.
[TestClass()]
public class AnotherClassTests
{
[TestMethod()]
public async Task ExecuteDataTest()
{
Task<bool> retValue = RetrieveFromDataBaseMoq(); // this returns true
var moq = new Mock<Iinterface>();
moq.Setup(x => x.RetrieveFromDataBase()).Returns(retValue);
AnotherClass obj = new AnotherClass((Class1)moq.Object); // error thrown from here
var result = await obj.ExecuteData();
Assert.IsTrue(result);
}
}
Выполненное моделирование выполнено успешно, т. Е. Не выдает никакой ошибки.Проблема, с которой я здесь сталкиваюсь, заключается в том, что, когда я передаю этот макет объекта в конструктор, возникает ошибка System.InvalidCastException: невозможно преобразовать объект "Castle.Proxies.Iinterface" в тип "Class1".
Я знаю, что он не может конвертировать макет интерфейса в конкретный тип класса.Но есть ли способ исправить эту ошибку или передать макет объекта в основной класс в любом случае.
Большое спасибо!