【发布时间】:2011-09-30 05:44:19
【问题描述】:
我的 Silverlight 项目中有一个简单的测试方法:
[TestMethod]
[Tag("User")]
public void ViewModel_NewUserAdded_DefaultCulturesLoaded()
{
//setup
Mock<INameService> mockNameService = new Mock<INameService>();
MainViewModel viewModel = new MainViewModel();
mockNameService
.Setup(m => m.DefaultCultures(It.IsAny<Action<LoadOperation<kk_mp_name>>>()))
.Returns(new Mock<OperationBase>(null).Object);
viewModel.ContextName = mockNameService.Object;
//action
Messenger.Default.Send(-1, "New User Added");
//verify
mockNameService.Verify(
(mo) => mo.DefaultCultures(It.IsAny<Action<LoadOperation<kk_mp_name>>>()),
Times.Exactly(1));
}
DefaultCultures 方法总是返回 null 而不是新的模拟对象。 我做错了什么?
【问题讨论】:
-
Mock 将返回一个默认值(例如 null),以防发生未设置期望的调用。所以您能否检查调用是否按预期进行 - 例如如果参数不同,即不匹配约束。
-
接口中的方法签名是:
OperationBase DefaultCultures(Action<LoadOperation<kk_mp_name>> callback);所以和It.IsAny<Action<LoadOperation<kk_mp_name>>>()太匹配了。只是你不能这样做...... -
= 试着让它成为一个严格的模拟......你应该得到一个更好的错误描述。因为如果调用没有明确的期望,它会抛出异常而不是返回 null。查看起订量文档,了解如何使其成为严格的模拟。
-
不,这没有帮助。模拟创建时没有错误,但仍返回 null 而不是 object。
标签: .net silverlight unit-testing mocking moq