gpt4 book ai didi

unit-testing - 如何使用 Rhino Mocks 的记录重播模式避免设置代码重复?

转载 作者:行者123 更新时间:2023-12-04 04:38:50 24 4
gpt4 key购买 nike

这是一个使用 Rhino Mocks 的绿色测试套件。

[SetUp]
public void BeforeEachTest()
{
_mocksRepo = new MockRepository();
_mockBank = _mocksRepo.StrictMock<IBank>();
//_mockPrinter = _mocksRepo.StrictMock<IPrinter>();
_mockPrinter = _mocksRepo.DynamicMock<IPrinter>();
_mockLogger = _mocksRepo.StrictMock<ILog>();

_testSubject = new CrashTestDummy(DUMMY_NAME, _mockPrinter, _mockLogger);
}

[TearDown]
public void AfterEachTest()
{
_mocksRepo.ReplayAll(); // 2nd call to ReplayAll does nothing. Safeguard check
_mocksRepo.VerifyAll();
}

[Test]
public void Test_ConstrainingArguments()
{
_mockPrinter.Print(null);
LastCall.Constraints(Text.StartsWith("The current date is : "));
_mocksRepo.ReplayAll();

_testSubject.PrintDate();
}

现在要在另一个装置中进行测试,我必须对 ctor 进行轻微更改 - 在打印机界面中订阅一个事件。这导致上述测试夹具中的所有测试都变红。

public CrashTestDummy(string name, IPrinter namePrinter, ILog logger)
{
_printer = namePrinter;
_name = name;
_logger = logger;

_printer.Torpedoed += KaboomLogger; // CHANGE
}

NUnit 错误选项卡显示

LearnRhinoMocks.Rhino101.Test_ConstrainingArguments:
TearDown : System.Reflection.TargetInvocationException : Exception has been thrown by the target of an invocation.
----> Rhino.Mocks.Exceptions.ExpectationViolationException : IPrinter.add_Torpedoed(System.EventHandler`1[LearnRhinoMocks.MyEventArgs]); Expected #1, Actual #0.

解决此问题的方法是将测试对象从 Setup() 创建的行移动到测试中的 ReplayAll() 行下方。 Rhino mocks 认为你已经设置了一个事件订阅作为一个期望。然而,此修复意味着每个测试中的(一些)重复。每个测试通常在调用 ReplayAll 之前添加一些期望。

我知道这是一个特定的场景,涉及到测试主题 ctor 中的事件订阅。

  • 但这是正常情况,例如在 ModelViewPresenter 模式中,我很想知道是否有推荐的方法来执行此操作?
  • 另外,我不喜欢测试夹具中的多个测试由于外部测试驱动的更改而失败的方式?我在测试设计气味的国家吗?

最佳答案

我同意 Mark 使用显式设置而不是隐式设置的观点。但是关于 RhinoMocks 的使用,你有没有试过下面的东西。您可以暂时将模拟置于重播模式,稍后再恢复录制。像这样的东西:


SetupResult.For(_mockPrinter...);
_mocksRepo.Replay(_mockPrinter);
_testSubject = new CrashTestDummy(DUMMY_NAME, _mockPrinter, _mockLogger);
_mocksRepo.BackToRecord(_mockPrinter, BackToRecordOptions.None);

关于unit-testing - 如何使用 Rhino Mocks 的记录重播模式避免设置代码重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1496342/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com