首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >存根回显未知输入的函数

存根回显未知输入的函数
EN

Stack Overflow用户
提问于 2014-04-08 00:58:14
回答 2查看 130关注 0票数 0

我有一个方法,它接受单个方法接口的多个实现,并依次执行它们。其中每一个都以某种方式改变了ValueType

代码语言:javascript
复制
public interface IValueTypeMutator
{
    ValueType ModifyValueType(ValueType valueType);
}

public class ValueTypeBuilder
{
    public ValueType Create(params IValueTypeMutator[] mutators)
    {
        var valueType = new ValueType { X = "SomeConstant" };

        return mutators.Aggregate(
            (valueType, mutator) => mutator.ModifyValueType(valueType));
    }
}

当我测试一个使用ValueTypeBuilder的类时,每个IValueTypeMutator都是一个存根。为了在初始化后保持ValueType的状态,对于某些测试,我希望存根简单地将ValueType输入的值作为返回值。

这是必要的,因为如果没有显式的Stub()实现,存根的默认行为是返回null,这将覆盖前面Create()方法中ValueType的初始化。然而,定义在ValueType的初始化中使用的实际值将导致测试变得不必要地脆弱:ValueType的精确初始化与这些特定的测试无关,只是它的状态被维持。

EN

回答 2

Stack Overflow用户

发布于 2014-04-08 00:58:14

RhinoMocks Do() Handler符合这里的要求。

代码语言:javascript
复制
    _stubMutator = MockRepository<IValueTypeMutator>();
    _stubMutator
        .Stub(x => x.ModifyValueType(Arg<ValueType>.Is.Anything))
        .Do((Func<ValueType, ValueType>) (v => v));

在本例中,ValueType的精确初始化不是测试的主题,因此我使用了Arg<ValueType>.Is.Anything来确保无论ValueType的值如何,都会调用标识函数。

票数 2
EN

Stack Overflow用户

发布于 2014-04-08 01:48:00

我不禁认为雪莉,你实际上可以使用假的或真正的IValueTypeMutator。使用具体的类进行单元测试并没有错。在这种情况下,我会将private class FakeValueTypeMutator放入测试类中。现在发生的事情变得清晰多了。

代码语言:javascript
复制
[TestFixture]
public ValueTypeBuilderTest
{
    private class FakeValueTypeMutator : IValueTypeMutator
    {
        public ValueType ModifyValueType(ValueType valueType)
        {
            return valueType;
        }
    }

    //Test code here!
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22918598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档