单元测试Async await方法断言如果调用(运行所有测试)但是如果我逐个运行则测试正在通过

时间:2018-05-23 04:47:25

标签: c# unit-testing async-await

单元测试Async await方法断言如果(运行所有测试)被调用但是如果我逐个运行则测试正在通过。

每种方法都没有相互依赖。

单元测试方法:

[TestMethod]
public async Task GetDataById()
{
    ////Act.
    var output = await Service.GetDataByID(1);
    ////Assert.
    Assert.IsNotNull(output);
    ////Act.
    output = await Service.GetDataByID(2);
    ////Assert.
    Assert.IsNull(output);
}

2 个答案:

答案 0 :(得分:0)

如果你在每次测试之前有任何模拟设置,那么在每次测试之后重置那些模拟(TearDown)。

  1. 避免在异步上下文中共享变量或状态
  2. ```

    [TestMethod]
    public async Task GetDataById()
    {
         ////Act.
        var output = await Service.GetDataByID(1);
         ////Assert.
        Assert.IsNotNull(output);
         ////Act.
        var output2 = await Service.GetDataByID(2); // <-- new variable
        ////Assert.
        Assert.IsNull(output2);
    }
    

    ```

    1. Assert only "one thing"多个断言都可以,只有一个动作的单个结果
    2. ```

      [TestMethod]
      public async Task GetDataByIdWhenExists()
      {
           //Act.
          var output = await Service.GetDataByID(1);
           ////Assert.
          Assert.IsNotNull(output);
      }
      
      [TestMethod]
      public async Task GetDataByIdWhenNotExists()
      {
           //Act.
          var output = await Service.GetDataByID(2);
           //Assert.
          Assert.IsNotNull(output);
      }
      

      ```

答案 1 :(得分:0)

这是Effort.DbConnectionFactory的CreatePersistent()方法我现在将它改为CreateTransient()。

感谢帮助人员。