gpt4 book ai didi

java - mockito - 模拟接口(interface) - 抛出 NullPointerException

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:58:41 26 4
gpt4 key购买 nike

我在模拟后也出现空指针异常。请找到我的项目结构。

    //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,意味着我编写了服务接口(interface),但没有实际实现。测试 listPets() 方法,我清楚地知道它使用该服务来获取宠物列表。但我在这里的目的是测试 App 类的 listPets() 方法,因此我试图模拟服务接口(interface)。

使用该服务获取宠物的 App 类的 listPets() 方法。因此,我正在使用 mockito 模拟该部分。

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

但是当单元测试运行时,perService.listPets() 抛出 NullPointerException,我使用上面的 Mockito.when 代码模拟了它。你能帮我解决这个问题吗?

最佳答案

您还可以使用 @InjectMocks 注释,这样您就不需要任何 getter 和 setter。只需确保在对类(class)进行注释后在测试用例中添加以下内容,

@Before
public void initMocks(){
MockitoAnnotations.initMocks(this);
}

关于java - mockito - 模拟接口(interface) - 抛出 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19689061/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com