【发布时间】: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