学习 Moq,需要在测试回调结果方面寻求帮助。结构如下:我有一个
如何设置模拟服务器,使得下面的测试通过?简单的模拟设置是,我的模拟 DateServer 只需返回提供给它的任何字符串(在回调中)。
这是我的设置。我认为我已经正确地设置了大部分结构,但需要帮助填写下面代码中的 ????。如果我应该更好地测试回调返回值,那么我也很感兴趣。
DateManager
对象,它依赖于一个 DateServer
对象,该对象对服务器进行异步调用。
DateServer.GetValidDate
将接收一个 yyyy-MM-dd
格式的日期字符串,并使用相同格式的字符串执行给定的回调函数。如何设置模拟服务器,使得下面的测试通过?简单的模拟设置是,我的模拟 DateServer 只需返回提供给它的任何字符串(在回调中)。
这是我的设置。我认为我已经正确地设置了大部分结构,但需要帮助填写下面代码中的 ????。如果我应该更好地测试回调返回值,那么我也很感兴趣。
public interface IDateServer
{
// with a currencyPair (ie: USDCAD), verifies that the given date is
// valid for a potential transaction.
// Callback is used to process the returned result, which is a date string.
void GetValidDate(string currencyPair, string date, Action<string> callback);
}
public interface IDateManager
{
void GetDate(string currencyPair, string dateCode, Action<string> callback);
}
[TestClass]
public class DateManagerTests
{
[TestMethod]
public void GetDateTest()
{
ManualResetEvent ar = new ManualResetEvent(false);
Mock<IDateServer> server = new Mock<IDateServer>();
DateTime tradeDate = new DateTime(2016, 2, 17);
server.Setup( ???? );
IDateManager dm = new DateManager(tradeDate, server);
string ret = "";
dm.GetDate("USDCAD", "2016-02-17", (string s) =>
{
ret = s;
ar.Set();
});
ar.WaitOne();
Assert.AreEqual<string>(ret, "2016-02-17");
}
}
Debug
调用替换为Assert.AreEqual(testDateString, date)
。 - MotoSVcurrencyPair
、date
和callback
,将包含任何对server.Object.GetValidDate
的调用中传递的值,即使是从DateManager
中调用。 - MotoSVDateManager
构造函数的第二个参数是IDateServer
。如果是这样的话,那么当你执行new DateManager(....)
时,我会传递server.Object
,它将代表您接口的实际模拟实例。 - MotoSV