2016-08-30 12 views
0

以下のコード行については、mockito.whenでヌルポインタ例外を取得しています。エンティティマネージャ用のJunitテストケース

when(entityManager.createQuery(any(String.class)).setParameter(any(String.class), any(String.class)).getSingleResult()).thenReturn("2"); 

モックエンティティマネージャしようとし、これを解決するための任意のヘルプ

@Mock private EntityManager entityManager;

として宣言されていますか?

完全なテストクラスは

import main.java.com.as.dao.ASDAOImpl; 
 

 
import org.junit.runner.RunWith; 
 
import org.mockito.InjectMocks; 
 
import org.mockito.Mock; 
 
import org.mockito.runners.MockitoJUnitRunner; 
 
import org.springframework.test.util.ReflectionTestUtils; 
 

 
import static org.mockito.Matchers.any; 
 
import static org.mockito.Mockito.*; 
 

 
import org.junit.Before; 
 
import org.junit.Ignore; 
 
import org.junit.Test; 
 
@RunWith(MockitoJUnitRunner.class) 
 
public class ASDAOImplTest 
 
{ 
 
    @InjectMocks 
 
    ASDAOImpl asdaoImpl=new ASDAOImpl(); 
 
    @Mock 
 
    private EntityManager entityManager; 
 
    
 
    @Before 
 
    public void setUp() 
 
    { 
 
     ReflectionTestUtils.setField(asdaoImpl,"capLimit", 1); 
 
    } 
 
    
 
    @Test 
 
    @Ignore 
 
    public void validateCappingTest() 
 
    { 
 
     when(entityManager.createQuery(any(String.class)).setParameter(any(String.class), any(String.class)).getSingleResult()).thenReturn("2"); 
 
     asdaoImpl.validateCapping("2"); 
 
    } 
 
    
 

 
}

答えて

1

編集:ああ、すぐに話を聞きました。ここにエラーがあります...

when(entityManager.createQuery(any(String.class)).setParameter(...) 

entityManagerはモックです。デフォルトでは、モックはnullを返します。したがって、entityManager.createQuery(...)はnullを返します。ヌルにsetParameterを呼び出すとNPEです。あなたが挿入するために必要なもの

は、クエリのモック...

@Mock 
private Query query; 

... 

// when createQuery is called, return the mocked query object (instead of null) 
when(entityManager.createQuery(any(String.class)).thenReturn(query); 

// make sure that setParameter returns this query object back (would otherwise also be NPE) 
when(query.setParameter(any(String.class), any(String.class)).thenReturn(query); 

// And return the desired result from getSingleResult 
when(query.getSingleResult()).thenReturn("2"); 

旧答えです:

完全なコードなしで言うのは難しいが、推測では、あなたがmisssingしているということでしょうMockito初期化(@Mockで注釈された変数のオブジェクトを実際に作成する部分)。これは、少なくとも2つの方法で行うことができます

// Run the whole test with the Mockito runner... 
@RunWith(MockitoJUnitRunner.class) 
public class MyTestClass { ... 

か... Mockitoは、変数が(それはまた、ハンドル@Mockでアノテートされているすべてのオブジェクトの作成につながる

// Do the Mockito initialization "manually" 
@Before 
public void init() { 
    MockitoAnnotations.initMocks(this); 
} 

どちらの方法@ InjectMocksなど)。

これは役に立たない場合は、テストクラスをさらに投稿する必要があります。そうしないと、おそらく誰も役に立たない可能性があります。

+0

が追加されました。問題はまだあります。 – Jill

+0

ああ、私の悪い、答えを修正しました。 –

関連する問題