如何在 try catch 块中编写 C# 单元测试以获得正确的代码覆盖率

我有以下代码:


public class MyControllerClass : ApiController  

{  

   private readonly IManager _manager;


   public MyControllerClass(IManager manager)

   {

     this._manager = manager;

   }


   pubic async Task<IHttpActionResult> GetRequest()  

   {  

     try  

       {  

         await this._manager.GetRequest();  

         return this.ok();  

       }  

     catch (Exception ex)  

      {  

         this.logger.Error("Error message", ex);  

         throw this.HTTPResponseException("Request failed message", ex);   

      }   

   }


public class ManagerFake : IManagerFake  

{  

    public Task GetRequest()  

    {  

        return Task.FromResult(true);  

    }  

}     

我正在使用 NUnit 进行单元测试。对于单元测试,我在 IOC 容器中注册了一个 FakeManager 类,该类包含 GetResult() 方法,并在执行时简单地返回 Task.FromResult(true)。这允许执行 try 块中的逻辑,从而满足该部分的适当代码覆盖率。


我遇到的问题是如何使用相同的 FakeManager 类创建一个测试,该类将抛出异常,以便在无法对 GetRequest 进行两次唯一调用时执行 catch 块逻辑并满足代码覆盖率() 方法,因为它不接受可用于区分两个不同调用的输入参数?


繁星淼淼
浏览 146回答 2
2回答

动漫人物

您不使用返回 true 的相同 ManagerFake 类。制作一个不同的 IManager 实现来引发错误。或者,使用模拟对象库来创建模拟对象实例,该实例与您在每个测试中想要的行为完全一致。
打开App,查看更多内容
随时随地看视频慕课网APP