Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# RavenDB中的单元测试如何正确进行_C#_Unit Testing_Nunit_Ravendb_Nancy - Fatal编程技术网

C# RavenDB中的单元测试如何正确进行

C# RavenDB中的单元测试如何正确进行,c#,unit-testing,nunit,ravendb,nancy,C#,Unit Testing,Nunit,Ravendb,Nancy,所以我的问题如下…对于一个项目,我们正在使用RavenDb和Nancy构建一个api。所以我的问题是关于单元测试…我们使用嵌入式db,它在内存中运行,正如很多次建议的那样,如何选择合适的单元测试端点。例如,我们有一个端点创建帐户。为此,我们需要有一个用户,以便他可以创建帐户。最好的模拟方法是什么 目前我们是这样做的: [Test] public void UserCanAddAccountToCompany() { var user = new User {

所以我的问题如下…对于一个项目,我们正在使用RavenDb和Nancy构建一个api。所以我的问题是关于单元测试…我们使用嵌入式db,它在内存中运行,正如很多次建议的那样,如何选择合适的单元测试端点。例如,我们有一个端点创建帐户。为此,我们需要有一个用户,以便他可以创建帐户。最好的模拟方法是什么

目前我们是这样做的:

[Test]
public void UserCanAddAccountToCompany()
{
    var user =
      new User
      {
          Name = Guid.NewGuid().ToString(),
          Email = Guid.NewGuid().ToString(),
          Pwd = "password",
          CompanyReference = new CompanyReference { Id = Guid.NewGuid().ToString(), Name = Guid.NewGuid().ToString() }
      };

    var response = new TestBrowser<User>("User/SignUp", user).Response;

    var paramUserAccount = new ParamUserAccount()
    {
        User = response.Body.DeserializeJson<Result>().User,
        Account = new Account() { Name = Guid.NewGuid().ToString() }
    };

    var response2 = new TestBrowser<ParamUserAccount>("account/create", paramUserAccount).Response;
    var res = response2.Body.DeserializeJson<Result>();

    Assert.NotNull(res.Account.Id);
    Assert.NotNull(res.Account.Name);
}
[测试]
public void usercanadaccounttocompany()
{
变量用户=
新用户
{
Name=Guid.NewGuid().ToString(),
Email=Guid.NewGuid().ToString(),
Pwd=“密码”,
CompanyReference=newcompanyreference{Id=Guid.NewGuid().ToString(),Name=Guid.NewGuid().ToString()}
};
var response=newtestbrowser(“用户/注册”,User).response;
var paramUserAccount=新的paramUserAccount()
{
User=response.Body.DeserializeJson().User,
Account=new Account(){Name=Guid.NewGuid().ToString()}
};
var response2=新的测试浏览器(“帐户/创建”,paramUserAccount).Response;
var res=response2.Body.DeserializeJson();
Assert.NotNull(res.Account.Id);
Assert.NotNull(res.Account.Name);
}
所以我们创建一个用户,调用用户注册端点,然后从response中获取参数,并调用create account端点。这种方法的一个明显问题是,如果您更改了注册端点,并且由于某种原因破坏了它,那么所有类似的测试都将失败


所以我的问题是…什么是正确的方法

您是集成测试,而不是单元测试。要正确地进行单元测试,您需要使用模拟对象在没有db的情况下进行测试。

尽管您是对的,但您的答案非常简洁。请您指导用户如何朝这个方向迈出第一步,或者至少链接到一个类似的问题。