2

私は次のようなクラスを持っています:

public class ClassA
{
    public bool MethodA()
    {
      //do something complicated to test requiring a lot of setup
    }
    public bool MethodB()
    {
         if (MethodA())
             //do something
         else
             //do something else
         endif
    }
}

MethodA のテストがあり、MethodB をテストしたいのですが、やりたいことは、MethodA が true を返す場合は何かが起こることを確認し、MethodA が false を返す場合は何かが起こることを確認することだけです。Rhino Mocks でこれを行うことはできますか? それとも、MethodA のテストで既に使用しているのと同じモックをすべてセットアップする必要がありますか?

4

2 に答える 2

1

これがコンテキストなしで実行可能かどうかを言うのは難しいですが、1 つの解決策として MethodA() を独自のクラスに抽出し、単体テストの希望どおりに機能するモック オブジェクトで MethodB() を呼び出して MethodA() を呼び出すことができます。 .

もう 1 つの可能性は、ユニット テストで ClassA をサブクラス化し、MethodA() をオーバーライドして、ユニット テストに応じて true または false を返すことです。

//--- pseudo-code 
public ClassAMethodAReturnTrue : public ClassA { 
  public bool MethodA() { return true; } 

  ...

次に、テストで、ClassA の代わりに ClassAMethodAReturnTrue をインスタンス化します。ClassAMethodAReturnFalse も同様に記述します。

于 2008-11-19T10:52:58.847 に答える
1

クラスからインターフェイスを抽出するか、抽象化する必要があるかもしれませんが、Rhino.Mocks がクラスとインターフェイスをモックできることは十分に確信しています。つまり、次のようなことができるはずです。

ClassA myClass = MockRepository.PartialMock(typeof(ClassA));

Expect.Call(myClass.MethodA).Return( true );

MockRepository.ReplayAll()
Assert.AreEqual( false, myClass.MethodB() )
MockRepository.VerifyAll()

構文は少しずれている可能性がありますが、これにより MethodB を MethodA とは別にテストできるはずです。

于 2008-11-19T11:00:56.133 に答える