在我的服务类中,我有@Autowired HttpServletRequest,并且在我的服务方法中使用了相同的对象,但是对于该服务方法测试类,我无法在我的测试方法中模拟HttpServletRequest对象,请检查以下代码。我收到请求对象的空指针异常
jsonToSaveToDB.filter(obj => obj.ProductID !== null)
@Component("someServiceClass")
public class SomeServiceClassImpl implements SomeServiceClass {
@Autowired
private HttpServletRequest request;
@Autowired
private HttpServletResponse response;
@Override
public void method(String id) {
String param = request.getParameter("param");
// Here i am getting request object as null
}
}
答案 0 :(得分:1)
setup()方法是否被调用?
您是否应该添加一个@RunWith
注释来指定一个运行程序,该运行程序将执行标记为@Before
的方法?
例如,您可以将课程标记为@RunWith(MockitoJUnitRunner.class)
答案 1 :(得分:1)
您的类似乎错过了@RunWith
批注,因此模拟未初始化
添加@RunWith(MockitoJUnitRunner.class)
(或SpringRunner
),它将解决该问题。
一般来说,我认为最好使用构造函数而不是在现场自动装配。我知道这是一个风格问题,但是这样做可以解决使用InjectMocks
或其他任何基于反射的工具的需要。
答案 2 :(得分:0)
您初始化了这些模拟对象吗?否则,您将获得Null Pointer异常
@Before public void initMocks() {
MockitoAnnotations.initMocks(this);
}
答案 3 :(得分:0)
我遇到了这个问题,当我添加@WebAppConfiguration时,它就解决了。
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
public class SomeServiceClassImplTest {
@InjectMocks
private SomeServiceClassImpl someServiceClass;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
}
@Test
public void methodTest() {
Mockito.when(request.getParameter(Mockito.any())).thenReturn("dm");
}
}