Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在同一类中实现Moq单元测试和实际单元测试方法_C#_Unit Testing_Moq - Fatal编程技术网

C# 在同一类中实现Moq单元测试和实际单元测试方法

C# 在同一类中实现Moq单元测试和实际单元测试方法,c#,unit-testing,moq,C#,Unit Testing,Moq,需要在同一个测试类中实现Moq单元测试和实际单元测试,并借助一些配置文件键。 是否可以使用基于配置值分配的相同对象执行此操作 表示如果配置文件键为“Moq”,则Moq单元测试将运行,如果不是,则实际单元测试将在同一测试类和同一方法中运行。可以,但可能不是最佳做法。 比如说, public class MyClass { IDependency _d; public MyClass(IDependency d) { _d = d; } } public clas

需要在同一个测试类中实现Moq单元测试和实际单元测试,并借助一些配置文件键。 是否可以使用基于配置值分配的相同对象执行此操作


表示如果配置文件键为“Moq”,则Moq单元测试将运行,如果不是,则实际单元测试将在同一测试类和同一方法中运行。

可以,但可能不是最佳做法。 比如说,

public class MyClass
{
   IDependency _d;
   public MyClass(IDependency d)
   {
      _d = d;
   }
}
public class Dependency : IDependency
{
}
在测试类中,我可以有如下内容:

[TestClass]
public class MyClassTests
{
   MyClass _sut;
   Mock<IDependency> _mockDependency;
   Dependency _realDependency;
   [TestInit]
   public void Init()
   {
      var shouldUseMock = ConfigurationManager.AppSettings["key"];
      if(shouldUseMock)
      {
         _mockDependency = new Mock<IDependency>();
        _sut = new MyClass(_mockDependency.Object) 
      }
      else
      {
        _realDependency = new Dependency();
        _sut = new MyClass(_realDependency);
      }
   }
}
[TestClass]
公共类MyClassTests
{
我的班级_sut;
模拟(mockDependency);;
依赖(realdependence);;
[测试]
公共void Init()
{
var shouldUseMock=ConfigurationManager.AppSettings[“key”];
如果(应使用模拟)
{
_mockDependency=newmock();
_sut=新的MyClass(_mockDependency.Object)
}
其他的
{
_realDependency=新依赖项();
_sut=新的MyClass(_realDependency);
}
}
}

问题是根据不同的情况设定期望值,这使得测试类更难维护。您应该创建两个测试,一个是带有
mock
的真实单元测试,另一种是带有真实实现的集成测试

我不清楚你在问什么。我从来没有听说过Moq单元测试和“实际”单元测试之间的区别;你能详细说明一下吗?你应该更具体一些。我真的不知道你在说什么。对不起。意味着有两种方法可以实现单元测试1。使用某些框架模拟结果,我正在使用Moq。2.实际单元测试调用,直接调用数据库获取实际数据。我想在相同的测试方法中实现这两种方法,可以使用配置值进行管理。意思是如果我设置1,那么Moq单元测试应该发生,如果我设置2,那么实际的单元测试应该发生。所以第二个测试不是单元测试,而是集成测试。对不起,我可能错了。我们可以不用模拟就进行单元测试,对吗?因此,如果我们尝试运行测试,那么如果有任何数据库调用,那么它将进行调用以获取实时数据?正当如果我使用的是执行数据库调用的helper对象,那么我希望创建一个动态对象,该对象将在TestInitialize上初始化,其中设置了一个条件,以设置helperobject=new Mock();或helperobject=newhelperClass();哪个最小起订量是返回值还是实际值?