【发布时间】:2018-06-06 20:27:20
【问题描述】:
基本上我有一个功能
public Task CustomerUpdate(string user, JObject jobject)
{
...
JObject newDocument = JObject.FromObject(jobject);
newDocument["lastUpdate"] = Datetime.Utcnow();
newDocument["someFlag"] = "foo";
// change some more properties in newDocument
// call the database provider
await this.dbProvider.ReplaceAsync(user, newDocument);
}
在我的单元测试中,我是这样嘲笑的:
dbProvider.Setup(p => p.ReplaceAsync(It.IsAny<string>(), It.IsAny<JObject>()))
.Returns(Task.CompletedTask);
我需要验证作为参数传递给 dbProvider.ReplaceAsync 方法的 newDocument 是否具有正确的属性值。
理想情况下,我想从我的单元测试中做到这一点:
Assert.IsEquals("foo", newDocument["someFlag"])
但我的单元测试无法访问 CustomerUpdate 函数中的局部变量。而且我认为我也不能使用回调,因为 dbprovider 没有返回更新的对象。
知道我能做什么吗?
【问题讨论】:
-
如果解析不正确,可以抛出异常。您可以返回
ReplaceAsync的结果或它保存的对象,然后验证。但也许你需要打破这个过程,这样你就可以分别测试每个阶段。
标签: c# unit-testing testing moq