1

私はそのようなコードを持っています:

public class A {
    int n;
    public A() {
        n = 10;
    } 
    public int get() {
        B b = new B(...);
        return b.getValue() + n;
    }
}

get() を単体テストしたいのですが、B のコンストラクターは非常に複雑なので、B をモックしたいのですが、ここで問題が発生します。B をモックした後、モック オブジェクトを A に設定するメソッドがありません。だから、どんな体にも良い考えがありますか?

4

2 に答える 2

3

次のようにクラスを設定した場合:

public class A {
 int n;
 public A() {
     n = 10;
 } 
 public int get() {
    return getValueFromB() + n;
 }
 protected int getValueFromB()
 {
    return new B().getValue();
 }
}

getValueFromB() をモックできます。get() は getValueFromB() に依存するようになりました。これはモック化されており、後で実装できます。

于 2012-12-10T13:27:00.350 に答える
2

Powermock では、B インスタンスの構築をモックできます。

まず、クラスに注釈を付ける必要があります。

@PrepareForTest(A.class)

次に、モックを作成して動作を記録します。

B bMock = createMock(B.class);
expectNew(B.class, "someargument").andReturn(bMock);
expect(bMock.getValue()).andReturn(something);

replay(bMock, B.class);
verify(bMock, B.class);

完全なドキュメントを読んでください。

于 2012-12-10T13:27:35.783 に答える