2017-02-23 36 views
0

测试时,我有叫UserDto一个简单的对象,它看起来像:使用邮政与NancyFx

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) 
    { 
    } 
} 

所有这些代码的作品找到我时,手动测试,但我想创造一些自动化测试,将调用Web地址就像我成功地与我的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),我的控制器代码不会抛出错误,但生成的用户对象在那里与其所有成员,但所有成员该对象为空。用户显示名字&姓氏,但他们都是空的。

我甚至尝试使用“with.Body(NEWUSER);但得到的编译时错误‘无法从UserDto转换为字符串’

我知道控制器代码的工作,所以必须有一些错误。 。我的测试代码,我显然不正确地换手的NEWUSER对象

任何帮助,将不胜感激

回答

0

为了解决这个问题,我不得不使用下面的代码测试方法:

var result = browser.Post("/DB/SQLite/users/create", with => 
{ 
    with.Header("Content-Type", "application/json"); 
    with.Body(jsonUser); 
}); 

因此我错过了标题指定,这使所有的区别。