2

コード レビューで、次のようなコメントがありました。および「重要なヒント: ファクトリは静的であってはなりませんが、注入する必要があります。」

テスト.java:

Foo foo = FooFactory.get(argument);

FooFactory.java:

public final class FooFactory {
    public static Foo get(String argument) {
        return new Foo();
    }
}

それ以外の場合はどうすればよかったですか?レビュアーの最初のコメントで「再バインド」とはどういう意味ですか?

4

2 に答える 2

8

あなたがしたことをすることで、基本的に依存性注入を無視し、代わりに静的ファクトリを使用しました. したがって、単体テストで、ファクトリが Foo の実際のインスタンスではなく偽のインスタンスを返すようにしたい場合は、できません。

代わりに、依存性注入を使用する必要があります (Spring の例はこちら)。

public class SomeService
    private FooFactory fooFactory;

    @Autowired
    public SomeService(FooFactory fooFactory) {
        this.fooFactory = fooFactory;
    }

    public void someMethod(String arg) {
        Foo foo = fooFactory.create(arg);
        ...
    }
    ....
}

そして今、単体テストでは、必要な FooFactory 実装 (通常はモック) を注入できます。

于 2012-05-17T18:33:17.027 に答える
3

ほとんどの依存性注入フレームワークでは、実行時に特定のオブジェクト実装をバインドできます。レビュアーもそういうことを言っているのではないかと思います。もちろん、これを利用するには、静的にファクトリを作成するのではなく、ファクトリを注入する必要があります。

于 2012-05-17T18:29:11.467 に答える