22

同様の動作を持ついくつかのクラスを開発しましたが、それらはすべて同じインターフェースを実装しています。適切なオブジェクトを作成してインターフェイスを返すファクトリを実装しました。工場の単体テストを書いています。返されるのは、オブジェクトへのインターフェースだけです。工場が正しく機能していることをテストする最良の方法は何ですか?

その答えをJavaで知りたいのですが、言語をまたがる解決策があれば教えていただきたいです。

2番の答えは、他の答えのように行われますか? もしそうなら、私は他の答えも受け入れたとマークし、私の質問を言い換えて、インターフェースが返されるファクトリとインターフェースを実装した具象クラスのタイプがわからない場合と、具象クラスが何であるかを知っている場合の両方に対処します使用済み。

4

5 に答える 5

23

あなたのファクトリメソッドがどのように見えるかわからないので、今私がアドバイスできるのは

  1. オブジェクトが探していた正しい具象実装であることを確認します。

    IMyInterface fromFactory = factory.create(...);  
    Assert.assertTrue(fromFactory instanceof MyInterfaceImpl1);
    
  2. ファクトリが有効なインスタンス変数を使用して具象インスタンスをセットアップしたかどうかを確認できます。

于 2008-09-01T00:47:22.907 に答える
0

@cem-catikkas getClass().getName() 値を比較する方が正しいと思います。MyInterfaceImpl1 クラスがサブクラス化されている場合、サブクラスは MyInterfaceImpl1 のインスタンスであるため、テストが壊れる可能性があります。以下のように書き直します。

IMyInterface fromFactory = factory.create(...);  
Assert.assertEquals(fromFactory.getClass().getName(), MyInterfaceImpl1.class.getName());

これが何らかの形で失敗する可能性があると思われる場合 (私には想像できません)、2 つの検証を行ってください。

于 2008-09-02T12:22:57.703 に答える
0
if (myNewObject instanceof CorrectClass)
{
    /* pass test */
}

アップデート:

なぜこれがマークダウンされたのかわからないので、少し拡大します...

public void doTest()
{
    MyInterface inst = MyFactory.createAppropriateObject();
    if (! inst instanceof ExpectedConcreteClass)
    {
        /* FAIL */
    }
}
于 2008-09-01T00:49:18.517 に答える