作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下 NancyFX 单元测试。我使用 Shouldly断言库,以提供从 .Should---
开始的扩展方法集
[Fact]
public void Assessment__Should_return_assessment_state_for_specified_user()
{
const AssessmentState assessmentState = AssessmentState.Passed;
var user = Fake.Mentor();
using (var db = Fake.Db())
{
db.Save(user);
Fake.Assessment(user.Id, db, assessmentState);
db.ClearStaleIndexes();
}
var response = Fake.Browser(user.UserName, user.Password)
.Get("/assessment/state/" + user.Id, with => with.HttpRequest());
//var result = (dynamic)body.DeserializeJson<ExpandoObject>();
var result = (dynamic) JsonConvert.DeserializeObject<ExpandoObject>(response.Body.AsString());
result.ShouldNotBe(null);
((AssessmentState) result.State).ShouldBe(assessmentState);
}
AssessmentService
uri 定义为
/assessment/state/" + user.Id
它返回一个简单的 JSON 对象定义,它有一个属性
State
类型(枚举)
AssessmentState
, 要么
Passed
,
Failed
或
NotStarted
.
Get["/assessment/state/{userid}"] = parameters =>
{
var assessment = AssessmentService.GetByUserId(Db, (string)parameters.userid);
return assessment == null ? HttpStatusCode.NotFound : Response.AsJson(new
{
assessment.State
});
};
{"State":1}
BrowserResponse.Body
提供的内置方法。目的:
var result = (dynamic)response.Body.DeserializeJson<ExpandoObject>();
var result = (dynamic) JsonConvert.DeserializeObject<ExpandoObject>(response.Body.AsString());
((AssessmentState) result.State).ShouldBe(assessmentState);
result.ShouldNotBe(null);
最佳答案
第一个问题我不能回答,但是WRT Shouldly 和动态类型,Shouldly 的ShouldNotBe
method 是 object
上的扩展方法. DLR 不允许您对类型为 dynamic
的对象调用扩展方法。 (因此您看到的运行时绑定(bind)程序异常)
我建议,如果您想在结果上调用 ShouldNotBe(null),则必须将其转换为 object
第一个(即:((object)result).ShouldNotBe(null)
)
-X
关于json - NancyFX : How do I deserialize dynamic types via BrowserResponse. Body.DeserializeJson(单元测试),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10481895/
我是一名优秀的程序员,十分优秀!