我正在尝试使用Moq来模拟方法,它将FilterExpression作为输入参数,到目前为止我没有运气。当我运行它时总是返回null。如果我通过NULL
而不是FilterExpression,则可以正常工作。
这是我的代码:
存储库
public interface ITestRepository
{
string Test(int id, FilterExpression fe);
}
public class TestRepository : ITestRepository
{
public stringTest(int id, FilterExpression fe)
{
throw new NotImplementedException();
}
}
单元测试
var testMock = new Mock<ITestRepository>();
var fe = new FilterExpression();
var result = “Hello World”;
var id = 1;
//DOESN’T WORK
testMock.Setup(r => r.Test(id, filterExpression)).Returns(result);
//WORKS
testMock.Setup(r => r.Test(id, null)).Returns(result);
//Test
[TestMethod]
public void test()
{
var fe = new FilterExpression();
var id = 1;
_testRepository.Test(id, fe);
_testRepository.Test(id, null);
}
答案 0 :(得分:1)
参数不匹配。您使用不同的 FilterExpression 。您是否尝试过放置任何 FilterExpression ?
testMock.Setup(r => r.Test(id, It.IsAny<FilterExpression>())).Returns(result);
答案 1 :(得分:0)
您的设置应包含原始对象;在你的代码示例中它没有:
testMock.Setup(r => r.Test(id, filterExpression)).Returns(result);
到
testMock.Setup(r => r.Test(id, fe)).Returns(result);
根据你上面的测试。此外,您定义的测试对象的设置在哪里?这些也应该在测试中定义。
答案 2 :(得分:0)
如果您尝试单元测试Dynamics CRM代码,那么您是否尝试FakeXrmEasy?
这是我自2014年以来一直在开发的一个开源项目,它自动为你调用IOrganizationService调用,包括你的FilterExpressions,还有任何QueryExpression(带有连接,过滤器,嵌套链接实体,order by),QueryByAttribute,FetchXml,主要的基本CRUD以及其他消息,如Associate,Disassociate,ExecuteMultiple,WhoAmIRequests等等......
它非常强大,它有800多个单元测试来测试测试框架本身(是的,meta是怎么回事?)和反馈,如this一个,非常好! :)
它定期帮助我每天,虽然它可以帮助其他CRM开发人员,也可以让社区的其他开发人员也可以贡献自己的改进和新功能(请这样做)。
它也可以作为NuGet包使用,这使得它非常容易上手。请查看文档页面here。
我实际上开始在另一个存储库上工作,为来自Javascript的Web API调用做同样的事情。
坚持和谐快乐的测试!