如何在服务测试类中模拟@Autowired HttpServletRequest?

在我的服务类中,我有@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
        }

    }
chenhui1646 回答:如何在服务测试类中模拟@Autowired HttpServletRequest?

setup()方法是否被调用?

您是否应该添加一个@RunWith注释来指定一个运行程序,该运行程序将执行标记为@Before的方法?

例如,您可以将课程标记为@RunWith(MockitoJUnitRunner.class)

,

您的类似乎错过了@RunWith批注,因此模拟未初始化

添加@RunWith(MockitoJUnitRunner.class)(或SpringRunner),它将解决该问题。

一般来说,我认为最好使用构造函数而不是在现场自动装配。我知道这是一个风格问题,但是这样做可以解决使用InjectMocks或其他任何基于反射的工具的需要。

,

您初始化了这些模拟对象吗?否则,您将获得Null Pointer异常

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

}

,

我遇到了这个问题,当我添加@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");

    }

}
本文链接:https://www.f2er.com/3139784.html

大家都在问