.net core net核心xunit不使用依赖注入进入方法

.net core net核心xunit不使用依赖注入进入方法,.net-core,dependency-injection,moq,xunit,.net Core,Dependency Injection,Moq,Xunit,我正在做一个netcorerestapi应用程序,我想用xunit来测试它 我有一个名为IContact的接口和一个简单的方法,还有一个名为Contact的具体类 public interface IContact { int Get(); } public class Contact: IContact { public int Get() { return 10; } } 在startup.cs中,我定义了这个 public void ConfigureSer

我正在做一个
netcorerestapi
应用程序,我想用
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>();
}
我有一个xunit项目,我正在使用Moq调用Get()方法()

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

我错过了什么

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

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

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

因为如果不这样做,mock将不知道调用时要做什么

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
Mock mockRepo=new Mock();
//将模拟设置为exptected。
mockRepo.Setup(=>quot.Get()).Returns(10);
//将模拟实例传递给测试对象
_控制器=新值控制器(mockRepo.Object);
//…正在测试的受试者

这与有什么不同?正如我在前面的问题中所解释的,您需要设置模拟,使其在调用时按预期运行。嗨,Nkosi,这与一个更简单的示例几乎是相同的问题。你是什么意思?我需要把模拟设置成我期望的样子?如果我的方法返回10。。我必须设置模拟返回10?这就像重新实施所有的核心业务。。。ThanksIt就像在不必再次实现逻辑的情况下伪造结果一样。谢谢,我想测试的是来自控制器的Get()方法。。。我的Contact类中的Get()方法,可以根据验证返回不同的值。。。我想测试一下。我是否必须假设要测试的方法的返回值?再次感谢Hanks,这就是我的想法,但我的意思是,如果我的Get()方法有一些逻辑,并且可以返回10到100,我该如何处理它?谢谢
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();
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