【问题标题】:net core xunit do not step into method using dependecy injectionnet core xunit 不使用依赖注入的方法
【发布时间】:2020-06-30 15:01:20
【问题描述】:

我正在做一个net core rest api 应用程序,我想使用xunit 对其进行测试。

我有一个名为 IContact 的接口和一个简单的方法,以及一个名为 Contact 的具体类

public interface IContact
{
   int Get();
}

public class Contact: IContact
{
  public int Get()
  {
     return 10;
  }
}

在 startup.cs 我定义了这个...

public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<IContact, Contact>();
}

我像这样使用默认值控制器

public class ValuesController : ControllerBase
{
   private IContact _contact;
   public ValuesController(IContact contact)
   {
      _contact = contact;
   }
   [HttpGet]
   public void Get()
   {
     int aa = _contact.Get();
   }
}

我有一个 xunit 项目,我在其中使用 Moq 调用 Get() Method()

public class UnitTest1
{
   ValuesController _controller;
   public UnitTest1()
   {
       Mock<IContact> mockRepo = new Mock<IContact>();
       _controller = new ValuesController(mockRepo.Object);
    }
    [Fact]
    public void Test1()
    {
       _controller.Get();
    }
}

我在调试模式下运行这个测试,当到达线时

int aa = _contact.Get();

我遇到的问题是它没有从Contact 类进入Get() 方法。它返回 0;

我错过了什么?

我在哪里设置接口 IContact 必须调用我在 startup.cs 中定义的 Contact 类?

【问题讨论】:

  • 这与your previous question有何不同?
  • 正如我在上一个问题中解释的那样,您需要将模拟设置为在调用时按预期运行。
  • 您好 Nkosi,这是一个更简单的例子,几乎是同一个问题。你是什​​么意思我需要设置模拟以达到我的预期?如果我的方法返回 10.. 我必须设置模拟返回 10?这就像再次实施所有核心业务......谢谢
  • 这就像伪造结果而无需再次实现逻辑。
  • 谢谢,我要测试的是我的 Controller 中的 Get() 方法...我的 Contact 类中的 Get() 方法,可以根据一些验证返回不同的值...我想测试它。我是否必须假设我要测试的方法的返回值?再次感谢

标签: .net-core dependency-injection moq xunit


【解决方案1】:

我遇到的问题是它没有从 Contact 类进入 Get() 方法。它返回 0

您需要将模拟设置为在调用时按预期运行。

因为如果您不这样做,模拟将不知道在调用时要做什么。

Mock<IContact> mockRepo = new Mock<IContact>();
//setup the mock to behave as exptected.
mockRepo.Setup(_ => _.Get()).Returns(10); 
//pass mocked instance to subject under test
_controller = new ValuesController(mockRepo.Object); 

//...exercise subject under test

【讨论】:

  • 谢谢,这就是我的意思,但我的意思是,如果我的 Get() 方法有一些逻辑,并且可以返回 10 o 100,我该如何处理呢?谢谢
猜你喜欢
  • 2016-05-22
  • 1970-01-01
  • 2016-06-26
  • 2020-06-30
  • 2021-10-23
  • 1970-01-01
  • 2021-02-02
  • 1970-01-01
  • 2021-07-15
相关资源
最近更新 更多