2016-11-13 14 views
0

ユニットテストと、テスト時に正しいクラスを取得する方法を理解しようとしています 舞台裏で何が起こっているかを正確に理解するのは難しいですこれのための使用法はあります。Javaユニットのテストパスの一致

これは、私がやろうとしていることの非常に単純な例です。私はここにインラインで書いていますので、おそらくいくつかのエラーが含まれているので、無視してみてください。

非常に単純なプロジェクトディレクトリ:

ba/src/main/java/utils/BaUtils.java ba/test/main/java/utils/BaUtilsTest.java notBa/src/main/java/im/BaObj.java

BaUtils.javaコード:

package com.ba.utils; 
import notBa.im.BaObj; 
public class BaUtils{ 
    public String doSomething(BaObj obj){ 
     obj.doSomething(); 
    } 
} 

私は実際にdoSomethingを呼び出しwihtout BaUtilsをテストしたい、と私は何も変更することはできませんBaObjクラスまたはnotBaパッケージ。元のBaObjと同じパッケージを持つ 'ba'プロジェクト(ba/test/java/notBa/main/java/im/BaObj.java)に新しいJavaファイルを追加することができます。実行時には、代わりにこのファイルがインポートされます実際のコードのBaUtilsコードがテストされましたが、BaObjコードは実行されません。

package notBa.im.Baobj 
public class BaObj{ 
    public void doSomething(){ 
     System.out.println("Did something"); 
    } 
} 

私の質問である(そして、ここまで到達してくれてありがとう):

この作業を行いどのよう

(読み参照は素晴らしいことだ)などのようになるはず

この種のテストビルは「良い」または「安全」と考えられていますか?

ありがとうございます!

+0

BaUtils.javaでいくつかのコードが変更されたらどうしますか? – Jobin

+0

BaUtils.javaはテストしたいコードです。変更するとテストを中断する必要があります。つまり、テストが機能したことを意味します。 – ABR

答えて

1

解決策は、模擬フレームワーク(私は自分自身のために私はMockitoのように)を使用することです。

テストは次のようになります。

class BlaUtilTes{ 
    @Rule 
    public MockitoRule mockitoRule = MockitoJUnit.rule(); 

    @Mock 
    Blaobj blaobj; 

    @Test 
    public void doSomething_WithMockedBlaobj_callsDosomethingOnBlaobj(){ 
    // arrange 
    BlaUtil blaUtil= new BlaUtil(); 
    // act 
    blaUtil.doSomething(blaobj); 
    // assert 
    Mockito.verify(blaobj).doSomething(); 
    } 
} 

あなたBaUtilsTestクラスが..私は、外部依存関係をあざけるためのためmockitoを使用しているに次のようになります

1

ここhttp://www.vogella.com/tutorials/Mockito/article.html#testing-with-mock-objectsをより多くの情報を見つけます。また、簡単な理解のために、メソッドの戻り値の型をStringに変更しました。

@RunWith(MockitoJUnitRunner.class) 
class BaUtilsTest { 

    BaUtils util; 

    @Mock 
    BaObj mockBaObj; 

    @Before 
    public void setup() { 
     util = new BaUtils(); 
    } 

    @Test 
    public void testDoSomething() { 

     Mockito.when(mockBaObj.doSomething()).thenReturn("did the work using mock"); 

     String result = util.doSomething(mockBaObj); 

     Assert.assertEquals("did the work using mock", result); 
    } 
} 
関連する問題