10

モックした後もヌルポインタ例外が発生しています。私のプロジェクト構造を見つけてください。

    //this is the pet interface
    public interface Pet{
    }

    // An implementation of Pet
    public class Dog extends Pet{
        int id,
        int petName;

    }
    // This is the Service Interface
    public interface PetService {
        List<Pet> listPets();
    }

    // a client code using the PetService to list Pets
    public class App {
        PetService petService;

        public void listPets() {
             // TODO Auto-generated method stub
             List<Pet> listPets = petService.listPets();
             for (Pet pet : listPets) {
                System.out.println(pet);
             }
        }
    }

    // This is a unit test class using mockito
    public class AppTest extends TestCase {

        App app = new App();
        PetService petService = Mockito.mock(PetService.class);
        public void testListPets(){
            //List<Pet> listPets = app.listPets();
            Pet[] pet = new Dog[]{new Dog(1,"puppy")};
            List<Pet> list = Arrays.asList(pet);
            Mockito.when(petService.listPets()).thenReturn(list);
            app.listPets();
        }
   }

私はここで TDD を使おうとしています. サービスインターフェースを書いていることを意味します. しかし, 実際の実装ではありません. listPets() メソッドをテストするために、このサービスを使用してペットのリストを取得していることは明らかです。しかし、ここでは App クラスの listPets() メソッドをテストするつもりなので、サービス インターフェイスをモックしようとしています。

サービスを使用してペットを取得する App クラスの listPets() メソッド。したがって、mockito を使用してその部分をモックしています。

    Mockito.when(petService.listPets()).thenReturn(list);

しかし、単体テストが実行されているとき、 perService.listPets()は、上記のMockito.whenコードを使用してモックしたNullPointerExceptionをスローします。これについて私を助けてもらえますか?

4

2 に答える 2

10

アノテーションを使用することもでき@InjectMocksます。そうすれば、ゲッターとセッターは必要ありません。クラスに注釈を付けた後、テストケースに以下を追加してください。

@Before
public void initMocks(){
    MockitoAnnotations.initMocks(this);
}
于 2014-09-30T10:03:45.503 に答える