我有一个名为UserDto的简单对象,它看起来像:
public class UserDto
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
我有一个南希控制器,创建用户的简化代码是,不提供路径信息,因为这一切都有效:
public void Create()
{
try
{
var user = this.Bind<UserDto>
// Create user using the user return variable
}
catch (Exception e)
{
}
}
当我手动测试时,所有这些代码都可以找到,但我想创建一些自动化测试来调用网址,就像我成功使用我的GET方法一样。
我的[TestMethod]测试代码的内部结构如下:
var bootstrapper = new DefaultNancyBootstrapper();
Browswer browser = new Browser(bootstrapper, to => to.Accept("application/json"));
UserDto newUser = new UserDto
{
FirstName = "TestFirst",
LastName = "TestLast"
};
string jsonUser = JsonConvert.SerializeObject(newUser);
var result = browser.Post("/DB/users/create, with =>
{
with.JsonBody(jsonUser);
// or
with.Body(jsonUser);
}
如果我使用“with.JsonBody(jsonUser),我的控制器代码抛出一个异常,我最终在catch块中出现错误:”无法绑定到类型UserDto“
如果我使用“with.Body(jsonUser),我的控制器代码不会抛出错误,但生成的用户对象与其所有成员一起存在,但该对象的所有成员都为null。用户显示FirstName&amp; LastName ,但它们都是空的。
我甚至尝试使用“with.Body(newUser);但是得到了编译时错误”无法从UserDto转换为字符串“。
我知道控制器代码有效,所以我的测试代码一定有问题。我显然没有正确地交出newUser对象。
非常感谢任何帮助。
答案 0 :(得分:0)
要解决这个问题,我必须在测试方法中使用以下代码:
var result = browser.Post("/DB/SQLite/users/create", with =>
{
with.Header("Content-Type", "application/json");
with.Body(jsonUser);
});
因此我错过了标题名称,这就完全不同了。