【问题标题】:Unit Testing with Rhino Mocks使用 Rhino Mocks 进行单元测试
【发布时间】:2015-11-20 14:02:56
【问题描述】:

我的 ConsoleApp 中名为 AutoLetterGenBatch 的抽象类中有以下名为 Execute() 的方法。我正在尝试对此进行单元测试。

public void Execute()
{
    BatchJobSecurity.Instance.CreatePrincipal();
    DoExecute();
}

所以我设置了我认为所有正确的引用并尝试调用如下方法。

[TestMethod]
public void TestMethod1()
{
    AutoLetterGenBatchJob ALGBJ = new AutoLetterGenBatchJob();
    ALGBJ.Execute();
}

但是,当我进行构建时,它给了我这个编译错误 Error 34 Cannot create an instance of the abstract class or interface 'AutoLetterGenBatch.AutoLetterGenBatchJob'

我对单元测试有些陌生。我意识到这可能不是一个很大的测试,但我只想看到我的 Execute() 方法暂时受到打击。我读过用抽象类解决这个问题的一个好方法是为抽象类设置一个模拟对象。所以我尝试用 RhinoMocks 来做这件事。

[TestMethod]
public void TestMethod1()
{          
    AutoLetterGenBatchJob ALGBJ = MockRepository.GenerateStub<AutoLetterGenBatchJob>();
    ALGBJ.Execute();
}

它现在构建时使用了所有正确的 using 语句。但是,当测试运行时,我现在收到此错误。 找不到具有匹配参数的构造函数。我对此还是很陌生。如果有人可以帮助我了解我需要做什么,我将不胜感激。

【问题讨论】:

    标签: unit-testing mocking rhino-mocks


    【解决方案1】:

    你我们的第一个测试没有任何意义,你的类是抽象的,根据定义你不能创建它的实例。为了测试该方法,您需要一个派生自 AutoLetterGenBatch 的类,然后创建该类的一个实例并执行必要的操作以在该实例上调用该方法。

    使用模拟框架是一种方法,创建自己的测试类也是如此。就我个人而言,我首先会选择“自己动手”,因为这样更容易调试。

    public class TestAutoLetterGenBatch : AutoLetterGenBatch
    {
    
    }
    

    一旦你有了这个类,你会发现你需要调用AutoLetterGenBatch 声明的构造函数。这与犀牛嘲笑它抱怨的问题相同。没有看到课程AutoLetterGenBatch,我们无法提供任何进一步的建议。

    就其价值而言,Rhino 模拟最近几乎没有什么工作,您可能会更好地使用 Moq 或其他更活跃的框架。

    你还需要generate a partial mock 来做你想做的测试,没有存根。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-13
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-30
      • 1970-01-01
      相关资源
      最近更新 更多