我有以下具有两个静态方法 Retrieve 和 RetrieveWithQuery 的类。在此处列出的类下面,我包含了一个测试片段。除了最后一个测试断言之外的所有断言都失败并显示以下消息:
失败的 TestMethod2 MoqTest Assert.AreEqual 失败。预期的:。实际:<(null)>。
我知道问题可能是我在模拟中设置的查询与 RetrieveWithQuery 方法中使用的查询不同。这就是为什么 is 会返回 null 的原因。
在一个完美的世界里,我会简单地重构服务类,不幸的是我正在使用已经生产的遗留代码。目标是首先完成测试,然后在更新生产环境之前重构代码并运行回归测试。
是否有解决方法或不同的方法来测试这个?
public class MyService
{
public virtual string RetrieveMethod(string account)
{
if (account == "The abc company")
{
return "Peter Smith";
}
return "John Doe";
}
public virtual string RetrieveMethod(MyQuery query)
{
return RetrieveMethod(query.QueryString);
}
public static string Retrieve(MyService service, string value)
{
return service.RetrieveMethod(value);
}
public static string RetrieveWithQuery(MyService service, string value)
{
var query = new MyQuery
{
QueryString = value
};
return service.RetrieveMethod(query);
}
}
public class MyQuery
{
public string QueryString;
}
[TestMethod]
public void TestMethod2()
{
var mockService = new Mock<MyService>();
const string company = "The abc company";
const string expectedContact = "Peter Smith";
var queryAccount = new MyQuery
{
QueryString = company
};
// Setup base retrieve
mockService.Setup(myServ => myServ.RetrieveMethod(company)).Returns(expectedContact);
// Setup base retrieve with query
mockService.Setup(myServ => myServ.RetrieveMethod(queryAccount)).Returns(expectedContact);
// test base retrieve with query - PASS
Assert.AreEqual(expectedContact, mockService.Object.RetrieveMethod(queryAccount));
// test static method retrieve - PASS
Assert.AreEqual(expectedContact, MyService.Retrieve(mockService.Object, company));
// test static method retrieve with query - FAIL
Assert.AreEqual(expectedContact, MyService.RetrieveWithQuery(mockService.Object, company));
}