我使用moq一段时间进行单元测试,
我想知道为什么我的模拟对象无法转换为接口,即使它实现了接口方法在转换为接口后没有返回任何内容,这里是我的简单代码:
POSRepository repo = this.mockPosRepository.Object;
IPOSRepository posRepo = repo;
if(repo.Prices.Count() > 0) // True
if(posRepo.Prices.Count() > 0) // false
我错过了什么吗?
答案 0 :(得分:0)
您可以使用As
方法将接口添加到模拟对象,如下所示:
mockPosRepository.As<IPOSRepository>();
不幸的是,如果类实现了接口,moq不仅可以解决它应该能够转换对象。
答案 1 :(得分:0)
@domysee,thx为你的回复我通过检查创建过程设法解决了这个问题,我应该创建一个真正的类而不是模拟类...我创建一个类似这个代码的问题
[TestMethod]
public void Test_Clean_Price()
{
Mock<CalcProcessor> calcProcessor = new Mock<CalcProcessor>();
calcProcessor.Setup(s => s.AddProcessor(It.IsAny<int>(), It.IsAny<int>())).Returns(1);
Mock<Calc> calc = new Mock<Calc>(calcProcessor.Object);//this should not a mock object
ICalc icalc = calc.Object;
int resultObject = calc.Object.Add(1, 2);
int resultInterface = icalc.Add(1, 2);
Assert.AreEqual(1,resultObject);//result 0
Assert.AreEqual(1, resultInterface);//result 0
}
}
public class CalcProcessor
{
public virtual int AddProcessor(int a, int b)
{
return a + b;
}
}
public class Calc : ICalc
{
private CalcProcessor cp;
public Calc(CalcProcessor calcp)
{
this.cp = calcp;
}
public virtual int Add(int a, int b)
{
return this.cp.AddProcessor(a,b);
}
public virtual int Substract(int a, int b)
{
throw new NotImplementedException();
}
}
public interface ICalc
{
int Add(int a, int b);
int Substract(int a, int b);
}