java - 模拟 Java Spring 测试 - NullPointerException

标签 java mocking

我是使用模拟进行测试的新手,我正在尝试在 Controller 上测试方法,但是我得到了 NullPointerException。这是我的 Controller 方法:

    //CREATE MARK
@RequestMapping(value = "/marks", method = RequestMethod.POST)
public void createMark(@RequestBody MarkDTO markDTO) {
    markService.createMark(markDTO);
}

这是我的服务:

public interface MarkService {

Page<MarkDTO> getMarks(Pageable pageable);
MarkDTO getMark(Integer id);

void createMark(MarkDTO markDTO);
void updateMark(Integer id, Mark mark);
void deleteMark(Integer id);

}

这是我的测试:

public class MarkControllerTest {

@Autowired
private WebApplicationContext ctx;

@Mock
private MarkService markService;

private MockMvc mockMvc;

@Before
public void setup(){

}

@Test
public void createMark() throws Exception {


   //doNothing().when(markService.createMark(markDTO));
    mockMvc.perform(post("/marks")
            .contentType(MediaType.APPLICATION_JSON)
            .content("{\n" +
                    "  \"id\": 1,\n" +
                    "  \"id_profesor\": 2,\n" +
                    "  \"valoare\": 10,\n" +
                    "  \"data_notare\": \"2017-05-29\"\n" +
                    "}"));
}

}

如果我取消注释 doNothing 行,则会收到错误,诸如 T Stubbed 之类的内容无法应用于 void。

我不知道如何模拟我的服务,但是我收到此错误:

java.lang.NullPointerException at com.fiivirtualcatalog.modules.homework.controllers.MarkControllerTest.createMark(MarkControllerTest.java:66)

知道我哪里可能会出错吗?

最佳答案

首先,不要忘记声明您想要在测试类中测试的 Controller ,并在 @Before 方法中调用它:

 MockitoAnnotations.initMocks(this);
 this.mockMvc = MockMvcBuilders.standaloneSetup(controller).build();

第二个,为了防止模拟 markService 方法调用错误,您需要使用以下代码:

doNothing().when(markService).createMark(markDTO);

而不是:

doNothing().when(markService.createMark(markDTO));

关于java - 模拟 Java Spring 测试 - NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44271139/

相关文章:

java - 如何在 Hibernate Criteria 中表达此 SQL(可能?)

java - Apache Camel MockEndpoint 模拟输出

javascript - Jest spyOn 仅在第二次调用和第三次调用时模拟实现

unit-testing - MockK - 在顶级 val 上调用模拟/ spy 顶级扩展方法

java - Java 泛型中没有抛出 ClassCastException

java - 有多个 SLF4J 绑定(bind)时如何使用 SLF4J

java - 如何确定控制台窗口中是否输入了任何内容?

Java 制作一个调用drawOval 的drawCircle 方法

javascript - Node.js - 模拟 promise 的结果

javascript - 如何使用 Jasmine 对窗口对象进行 Object.defineProperty 单元测试?