【问题标题】:Implement Moq Unit Test and Actual Unit Test methods in same class在同一类中实施 Moq 单元测试和实际单元测试方法
【发布时间】:2017-03-22 13:57:06
【问题描述】:

需要在同一个测试类中实现最小起订量单元测试和实际单元测试,借助一些配置文件密钥。 是否可以使用将根据配置值分配的相同对象来执行此操作?

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

【问题讨论】:

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

标签: c# unit-testing moq


【解决方案1】:

是的,您可以,但这可能不是最佳做法。 例如,

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);
      }
   }
}

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

【讨论】:

    猜你喜欢
    • 2017-12-01
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    • 2011-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-14
    相关资源
    最近更新 更多