Rhino Mocks在调试模式下表现不同。

5

我遇到了一个问题,当我运行单元测试时,一个简单的Rhino Mock桩方法会完美地工作,但在debug模式下执行时会抛出异常无法创建密封类的模拟对象。我已经尝试用一个Return方法替换Do,但这没有改变行为。

使用Rhino Mocks 3.6的C#,对于在单元测试中让Add函数执行减法的做法,如果有冒犯任何人之处,请谅解;)

接口

public interface ICalculator
{
    int Add(int value, int value2);
}

Classes

public class Calculator : ICalculator
{
    public int Add(int value, int value2)
    {
        return value + value2;
    }
}

public class Sums
{
    private ICalculator calculator;

    public Sums(ICalculator calculatorArg)
    {
        calculator = calculatorArg;
    }

    public int Add(int value, int value2)
    {
        return calculator.Add(value, value2);
    }
}

单元测试

[TestMethod()]
public void AddTest()
{
    //ARRANGE
    var calculatorArg = MockRepository.GenerateMock<ICalculator>();

    Func<int, int, int> subtract = delegate(int valueArg, int value2Arg)
    {
        return valueArg - value2Arg;
    };
    calculatorArg.Stub(x => x.Add(-1,-1)).IgnoreArguments().Do(subtract);

    Sums target = new Sums(calculatorArg);

    int value = 5;
    int value2 = 3;
    int expected = 2;

    //ACT
    int actual = target.Add(value, value2);

    //ASSERT
    Assert.AreEqual(expected, actual);
}

.NET框架的哪个版本?这段代码在.NET 4.0(和Rhino.Mocks 3.6)下的两种模式下都可以正常工作。如果您使用GenerateStub而不是GenerateMock会发生什么? - PatrickSteele
@PatrickSteele 嗯,你说得对,我重新创建了该项目,并且它可以工作。我对比了我的原始测试项目和新测试项目之间的视觉差异,没有发现任何变化-两者都使用相同的文件结构/内容和.NET框架(4.0)。我会进行全面比较并回复结果。 - keith
2个回答

6
我刚遇到了这个问题。 我删除了隐藏的 .suo 文件,然后它就可以工作了。
那时,我意识到通过删除设置,异常捕获选项也被删除了。它不会停在任何异常上。在“调试”->“异常...”中重新启用该选项会使错误重新出现。
然而,这是一个“第一次机会”的异常,所以简单的 F5(继续)将跳过它,代码实际上按预期运行。
因此,简而言之,解决方案是删除suo文件,这意味着重置设置,从而忽略异常。

2

删除suo文件

说明: PatrickSteele 友情指出使用我的代码创建新项目确实有效,我比较了原始项目和新项目中的每个文件,发现只有suo文件不同(除了Guid、项目名称等)。

删除解决方案中的.suo文件后,问题得到解决。虽然这不是我最喜欢的答案,但总归是一个答案。


有趣的...感谢跟进。 - PatrickSteele
我刚刚使用3.6.0.0复现了这个确切的问题并进行了修复。 - James World

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接