gpt4 book ai didi

c# - Rhino Mocks 部分模拟

转载 作者:太空狗 更新时间:2023-10-29 19:59:08 25 4
gpt4 key购买 nike

我正在尝试测试一些现有类的逻辑。目前无法重构这些类,因为它们非常复杂并且正在生产中。

我想做的是创建一个模拟对象并测试一个方法,该方法在内部调用另一个很难模拟的方法。

所以我只想为辅助方法调用设置一个行为。

但是当我设置方法的行为时,方法的代码被调用但失败了。

我是不是遗漏了什么或者如果不重构类就无法测试?

我尝试了所有不同的模拟类型(Strick、Stub、Dynamic、Partial 等),但当我尝试设置行为时,它们最终都调用了方法。

using System;
using MbUnit.Framework;
using Rhino.Mocks;

namespace MMBusinessObjects.Tests
{
[TestFixture]
public class PartialMockExampleFixture
{
[Test]
public void Simple_Partial_Mock_Test()
{
const string param = "anything";

//setup mocks
MockRepository mocks = new MockRepository();


var mockTestClass = mocks.StrictMock<TestClass>();

//record beahviour *** actualy call into the real method stub ***
Expect.Call(mockTestClass.MethodToMock(param)).Return(true);

//never get to here
mocks.ReplayAll();

//this is what i want to test
Assert.IsTrue(mockTestClass.MethodIWantToTest(param));


}

public class TestClass
{
public bool MethodToMock(string param)
{
//some logic that is very hard to mock
throw new NotImplementedException();
}

public bool MethodIWantToTest(string param)
{
//this method calls the
if( MethodToMock(param) )
{
//some logic i want to test
}

return true;
}
}
}
}

最佳答案

MethodToMock 不是虚拟的,因此不能被模拟。使用部分模拟可以实现您想做的事情(我已经在与您类似的情况下完成了),但是您想要模拟的方法必须是接口(interface)实现的一部分或标记为虚拟。否则,您无法使用 Rhino.Mocks 模拟它。

关于c# - Rhino Mocks 部分模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2764929/

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