2017-09-14 8 views
1

私は下のクラスのサンプルをテストしたい:JUnitのを使用して期待

public class Sample{ 
    public boolean sampleMethod(){ 
     SequenceCreate seq = new SequenceCreate(); 
     .... //Code where seq is used 
    } 
} 

SequenceCreateは、以下のように作成した別のクラスである:

public class SequenceCreate { 
     public String nextSeq() { 
     SecureRandom random = new SecureRandom(); 
     int number = random.nextInt(1000000); 
     return String.format("%06d", number); 
} 
} 
このdoesntの仕事

@SpringBootTest(classes = TfaApplication.class) 
@RunWith(SpringJUnit4ClassRunner.class) 
@WebAppConfiguration 
public class SampleTest{ 

    @Autowired 
    private Sample sample; 

    @Mock 
    private SequenceCreate seq; 

    public void sampleMethodtest(){ 
      when(sample.nextSeq()).return("123"); 
      assertTrue(Boolean.True,sample.sampleMethod()); 
    } 
} 

:以下のように

私のテストクラス。アサーションは失敗します。 時間をかけてデバッグすると、メソッドsomeMethod()が呼び出され、嘲笑された値をとらないときに、シーケンス番号が生成されることがわかりました。

どうすればいいですか?事前

+0

使用するモッキングフレームワークを明記する必要があります。 'assertTrue(Boolean.True、sample.sampleMethod());'は、最初の部分が 'message'であり、2番目の部分が' true'または 'false'を返さなければならないブール条件なので、常に失敗します。メソッドはブール値ではなく文字列を返します。 'assertTrue(" test was successful "、sample.sampleMethod()。equals(" 123 "));' – XtremeBaumer

答えて

0

おかげでこの文句を言わない仕事あなたがsampleMethod()内で手動SequenceCreateオブジェクトを作成しているよう。

あなたはSequenceCreateインスタンスフィールドを作り、あなたが適切にその依存関係やモックを注入することができ、公共セッターOS追加することができます。あなたはどうしたら、あなたのテストに続いて

public class Sample{ 

    private SequenceCreate seq; 

    public boolean sampleMethod(){ 
     .... //Code where seq is used 
    } 

    public void setSeq(SequenceCreate seq){ 
     this.seq=seq; 
    } 
} 

を:

@SpringBootTest(classes = TfaApplication.class) 
@RunWith(SpringJUnit4ClassRunner.class) 
@WebAppConfiguration 
public class SampleTest{ 

    @Autowired 
    private Sample sample; 

    @Mock 
    private SequenceCreate seq; 

    public void sampleMethodtest(){ 
      sample.setSeq(seq); 
      when(seq.nextSeq()).thenReturn("123"); 
      assertTrue(Boolean.True,sample.sampleMethod()); 
    } 
} 

Btw、あなたも間違った物を嘲笑していた。これは、メソッドで使用されるseq.nextSeq()である必要があります。

+0

私はそれを試しました...しかし、まだ生成されたseqはsampleMethodで異なっています() – pgman

+0

はreturnの代わりにreturnする必要があります。再試行する。また、sampleMethodメソッド内で起こっていることも重要です。これは投稿されていませんでした –

0

あなたはこれを複雑にしています。まずはSampleのユニットテストをしているので、Spring Bootはそれとは関係ありません。

第2に、SequenceCreateメソッドをモックする必要があるときに、コードがMocking Sampleです。

あなたのクラス

@RunWith(MockitoJUnitRunner.class) 

@Mock 
private SequenceCreate seq 

は、サンプルの新しいインスタンスを作成しますSequenceCreateのモックを作成してください

@InjectMocks 
private Sample sample; 

を記録します

をモックとしたい方法の期待
when(seq.nextSeq()).thenReturn("123"); 

あなたの主張をしてください。

assertTrue(Boolean.True,sample.sampleMethod()); 
+0

返信用のthx ..私はこれを試してみました..しかし、まだ幸運..もしあなたのいずれかが良いリンクを持っていれば、ここで共有することができます。私は理解しようとする可能性がありますので、他の誰かが間違っているかどうかはわかります – pgman

+1

http://www.vogella.com/tutorials/Mockito/article.html#testing-with-mock-objects – PaulNUK

関連する問題