1

FirstName抽象クラスに仮想プロパティがありますFoo。仮想プロパティの動作をテストする必要があります。このテストの実行時にメソッドが起動することはありません(したがって、メソッドの本体に何が含まれていても、テストは常に失敗します)。このメソッドをテスト対象のシステムにするにはどうすればよいですか?このメソッドをテストするにはどうすればよいですか?

[Subject(typeof(Foo))]
public class When_whatever 
{
    Establish context = () => 
    {
        _fooSut = _mockRepository.PartialMock<Foo>(argumentOne, argumentTwo);
    };

    Because of = () => _result = _fooSut.FirstName;

    It should_return_not_null = () => _result.ShouldNotBeNull();

    private static string _result;
    private static Foo _fooSut;
}

RhinoMocks3.5とmspecを使用しています。

4

3 に答える 3

0

機能を試しましPartialMockたか?こちらをご覧ください

于 2011-07-13T16:11:16.473 に答える
0

_mockRepository.ReplayAll()モックを使う前にやるべきだと思います。ただし、この場合は実行するだけです。ところで、どのような動作をテストしたいですか?抽象的な公共の財産を持つことは良いデザインではないと思います。Fooクラスも投稿してもらえますか?

于 2011-07-14T10:09:15.320 に答える
0

部分的なモックを作成する方法

部分モックを作成しています。これは、抽象クラスを実装し、クラスの仮想部分と抽象部分にモック機能を提供するモックです。

_fooSut = _mockRepository.PartialMock<Foo>(argumentOne, argumentTwo);

そして、あなたはあなたが仮想だったと言ったプロパティを呼んでいます、FirstName

_result = _fooSut.FirstName;

ただし、仮想呼び出しをスタブ化していないため、デフォルト値が返されます。この場合、null。この呼び出しをコンテキストに追加する必要があります。

_fooSut.Stub(x => x.FirstName).Return("Lance");

動作をテストする方法

ランス、私はthe_joricの質問をオウムにするつもりです...あなたがテストしようとしている振る舞いは何ですか?上で書いているテストは、モックをセットアップできるテストだけです。

私はあなたがこの抽象のために具体的なクラスをどのように実装しているかを推測し始めることができるだけです。それで、多分あなたがしたいのは、すべての実装がこのプロパティにnull以外の値を提供することをテストすることですか?その場合、ビヘイビアーを使用することをお勧めします。

[Behaviors]
public class ConcreteFoo
{
    It should_set_a_non_null_first_name = () => _fooSut.FirstName.ShouldNotBeNull();

    protected static Foo _fooSut;
}

そして、の各実装は、Fooこれらの動作に対してテストできます。

[Subject(typeof(DefaultFoo))]
public class When_using_a_default_foo
{
    Behaves_like<ConcreteFoo> a_concrete_impl_of_foo;

    protected static DefaultFoo _fooSut = new DefaultFoo();
}

[Subject(typeof(CustomFoo))]
public class When_using_a_custom_foo
{
    Behaves_like<ConcreteFoo> a_concrete_impl_of_foo;

    protected static CustomFoo _fooSut = new CustomFoo();
}
于 2011-07-26T21:17:35.307 に答える