【发布时间】:2026-02-21 22:55:01
【问题描述】:
全部,
感谢您的帮助。我对 Mockito 很陌生,如果我有一个服务类、一个控制器类(通过传入 Map 参数使用该服务),我该如何模拟该服务方法?
Helloworldservice.java
package service;
import java.util.Map;
public class Helloworldservice {
public String greeting() {
return "Hello, World";
}
public String greetingSB(Map<String, String> sb) {
return "Hello," + sb.get("name");
}
}
Helloworldcontroller.java
package controller;
import java.util.HashMap;
import java.util.Map;
import service.Helloworldservice;
public class Helloworldcontroller {
private Helloworldservice hservice;
public Helloworldcontroller() {
// TODO Auto-generated constructor stub
hservice = new Helloworldservice();
}
public String sayHello() {
return hservice.greeting();
}
public String sayHelloSB() {
Map<String, String> sb = new HashMap<String, String>();
sb.put("name", "somebody");
return hservice.greetingSB(sb);
}
}
HelloworldcontrollerTest.java
package unit.controller;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.MockitoJUnitRunner;
import controller.Helloworldcontroller;
import service.Helloworldservice;
@RunWith(MockitoJUnitRunner.class)
public class HelloworldcontrollerTest {
@InjectMocks
private Helloworldcontroller hcontroller;
private Helloworldservice hservice = new Helloworldservice();
@Mock
private Helloworldservice hservice_mock;
@Before
public void setup() {
hservice_mock = Mockito.spy(hservice);
/** I am not sure how to mock here for that param sb
Mockito.when(hservice_mock.greetingSB(.......))
.thenReturn("Hello, somebody");
**/
}
@Test
public void testGreeting() {
String h = hcontroller.sayHelloSB();
Assert.assertEquals(h, "Hello, sombody!!!");
}
}
服务总是返回null,我不确定是什么问题。
【问题讨论】:
-
控制器创建自己的真实服务。它不使用您的测试创建的模拟。使用依赖注入,即让控制器构造函数接受服务作为参数。然后将 mocj 服务传递给测试中的控制器。