2017-07-20 12 views
1
を使用してプライマリキーを返すinsertメソッドをモックん

ServiceImplクラスはMyBatisのinsert()リターン「isSuccessタグ」とオートレコードにUserオブジェクトのIDを使用してadd()方法、Mockitoを使ってモックadd()方法を持って、我々は得ることができませんユーザーID値とNulPointerExceptionが発生します。どのようにMockitoはMyBatisの

public class ServiceImpl{ 
     public int add() { 
      User newUser = new User(); 
      newUser.setName("uName"); 
      UserDao userDao=new UserDao(); 
      userDao.add(newUser); //Using myBatis insert() method,and it function is auto assign user.Id and return completed row number.  
      int userId = newUser.getId(); 
     } 
    } 

     //methodTest 
     public class ServiceImplTest 
     { 
      @Test 
      public void addTest() 
      { 
       UserDao userDao=Mockito.mock(UserDao.class); 
       when(userDao.add(isA(User.class))).thenReturn(1);//NullPointException in newUser.getId(); 
       ServiceImpl serviceImpl=new ServiceImpl(); 
       serviceImpl.add(); 
      } 
     } 

この問題を解決するにはどうすればよいですか? Thaks

+0

あなたはどんなモックが使用されているのか理解していますか? – Mritunjay

+0

私はコードを修正してもう一度質問を編集しましたが、NullPointExceptionが発生します。mybatisのinsert()メソッドは自動的にuserIdを割り当てますが、完了した行数を返します。 ()メソッドは、自動的にuserIdを割り当てますが、完了した行数を返します。私たちはメソッドの返り値だけをモックすることができ、thenReturn()によって代入を疑似できません。 – newCheng

答えて

0

擬似オブジェクトを保存し、具体的にはその擬似オブジェクトにadd関数を呼び出す必要があります。そうしないとあなたがモックを使用していない:

@Test 
public void addTest() { 
    ServiceImpl serviceImpl = Mockito.mock(ServiceImpl.class); 
    when(serviceImpl.add()).thenReturn(1); 
    serviceImpl.add(); 
} 

編集:また、あなたは存在しないシグネチャを持つ関数をモックすることはできません。そこでwhen(serviceImpl.add())コールからUser.classを削除しました。

関連する問題