Tag: mockito

如何将Mockito捕获的aguments传递给注入的模拟对象的方法?

我正在尝试测试一个服务类,它在内部使用Spring AMQP连接对象。 此连接对象由Spring注入。 但是,我不希望我的unit testing实际上与AMQP代理通信,因此我使用Mockito注入连接对象的模拟。 /** * The real service class being tested. Has an injected dependency. */ public class UserService { @Autowired private AmqpTemplate amqpTemplate; public final String doSomething(final String inputString) { final String requestId = UUID.randomUUID().toString(); final Message message = …; amqpTemplate.send(requestId, message); return requestId; } } /** * Unit test */ public […]

调用unmocked方法时抛出RuntimeException

我正在使用mockito。 我想在调用unmocked方法时抛出RuntimeException 。 有没有办法做到这一点?

使用Mockito,如何拦截void方法上的回调对象?

我正在使用mockito来测试遗留的JAAS / LDAP登录模块。 javax.security.auth.callback.CallbackHandler接口定义了该函数: void handle(javax.security.auth.callback.Callback[] callbacks) 我期待callbacks包含一个NameCallback ,这是需要操作以通过测试的对象。 有没有办法有效地模拟这个,或者我会更好地使用CallbackHandler的存根实现?

如何使用PowerMockito模拟私有静态方法?

我正在尝试模拟私有静态方法anotherMethod() 。 见下面的代码 public class Util { public static String method(){ return anotherMethod(); } private static String anotherMethod() { throw new RuntimeException(); // logic was replaced with exception. } } 这是我的测试代码 @PrepareForTest(Util.class) public class UtilTest extends PowerMockTestCase { @Test public void should_prevent_invoking_of_private_method_but_return_result_of_it() throws Exception { PowerMockito.mockStatic(Util.class); PowerMockito.when(Util.class, “anotherMethod”).thenReturn(“abc”); String retrieved = Util.method(); assertNotNull(retrieved); assertEquals(retrieved, “abc”); […]

Mockito – 存根方法时的NullpointerException

所以我开始为Java-Spring项目编写测试。 我使用的是JUnit和Mockito。 据说,当我使用when()… thenReturn()选项时,我可以模拟服务,而不需要模拟它们。 所以我想做的是,设置: when(classIwantToTest.object.get().methodWhichReturnsAList(input))thenReturn(ListcreatedInsideTheTestClass) 但无论我在哪个when子句中,我总是得到一个NullpointerException,当然这是有道理的,因为输入是null。 当我尝试从对象模拟另一个方法时: when(object.method()).thenReturn(true) 在那里我也得到一个Nullpointer,因为该方法需要一个未设置的变量。 但我想使用when().. thenReturn()来绕过创建这个变量等等。 我只是想确保,如果任何类调用此方法,那么无论如何,只返回true或上面的列表。 这是我身边的一个基本误解,还是有其他错误? 码: public class classIWantToTest implements classIWantToTestFacade{ @Autowired private SomeService myService; @Override public Optional getInformations(final InputData inputData) { final Optional data = myService.getListWithData(inputData); if (data.isPresent()) { final List allData = data.get().getItemDatas(); //do something with the data and allData return data; } return […]

如何使用mockito测试REST服务?

我是Javaunit testing的新手,我听说Mockito框架非常适合测试目的。 我开发了一个REST服务器(CRUD方法),现在我想测试它,但我不知道怎么做? 更多我不知道这个测试程序应该如何开始。 我的服务器应该在localhost上工作,然后在该url上调用(例如localhost:8888)? 这是我到目前为止所尝试的,但我很确定这不是正确的方法。 @Test public void testInitialize() { RESTfulGeneric rest = mock(RESTfulGeneric.class); ResponseBuilder builder = Response.status(Response.Status.OK); builder = Response.status(Response.Status.OK).entity( “Your schema was succesfully created!”); when(rest.initialize(DatabaseSchema)).thenReturn(builder.build()); String result = rest.initialize(DatabaseSchema).getEntity().toString(); System.out.println(“Here: ” + result); assertEquals(“Your schema was succesfully created!”, result); } 这是initialize方法的代码。 @POST @Produces(MediaType.APPLICATION_JSON) @Path(“/initialize”) public Response initialize(String DatabaseSchema) { /** Set the […]

使用Mockito模拟JdbcTemplate的DataSource

我正在尝试在Spring项目中测试一个类。 我想在测试类和dao类中进行尽可能多的更改,这样我就不必因为更改而重新测试所有类型的东西。 我正在使用的类有一个JdbcTemplate template类变量,该变量由以下实例化: setJdbcTemplate(DataSource dataSource) { this.template = new JdbcTemplate(dataSource); } 我想测试的方法使template.query()运行定义的SQL查询并将结果返回到列表。 我在我的测试用例中创建了以下内容,但我不确定如何使用它。 我可以使用Mockito使以下代码返回某个字符串列表吗? DataSource mockedDataSrc = Mockito.mock(DataSource.class); customerClassDao.setJdbcTemplate(mockedDataSrc); 我可以以某种方式使用when或another命令来设置我想要返回到JdbcTemplate的.query调用的内容吗?

如何使用Mockito在模拟对象上设置属性?

我有一个场景,我必须设置一个模拟对象的属性,如下所示: SlingHttpRequest slingHttpRequest= mock(SlingHttpRequest); slingHttpRequest.setAttribute(“search”, someObject); 当我尝试打印此属性时,我得到null 。 我该如何设置此属性?

java.lang.LinkageError:ClassCastException

我确实遇到过TestNG和RESTeasy的一个非常烦人的问题。 我有一个类,它针对一个使用RESTeasy框架公开自身的API类运行多个测试。 但是,如果我让测试运行maven(mvn test),那么我得到以下exception: java.lang.LinkageError: ClassCastException: attempting to castjar:file:/C:/Users/rit/.m2/repository/org/jboss/resteasy/jaxrs-api/2.3.0.GA/jaxrs-api-2.3.0.GA.jar!/javax/ws/rs/ext/RuntimeDelegate.classtojar:file:/C:/Users/rit/.m2/repository/org/jboss/resteasy/jaxrs-api/2.3.0.GA/jaxrs-api-2.3.0.GA.jar!/javax/ws/rs/ext/RuntimeDelegate.class at javax.ws.rs.ext.RuntimeDelegate.findDelegate(RuntimeDelegate.java:126) at javax.ws.rs.ext.RuntimeDelegate.getInstance(RuntimeDelegate.java:96) at javax.ws.rs.core.Response$ResponseBuilder.newInstance(Response.java:394) at javax.ws.rs.core.Response.status(Response.java:116) at javax.ws.rs.core.Response.status(Response.java:130) at com.pd.api.TokenAPI_V1.validateAccessToken(TokenAPI_V1.java:141) at com.test.pd.api.TokenAPI_V1Test.testIfValidAccessTokenReturnsCorrectHTTPHeadersWhenTokenIsNotFound(TokenAPI_V1Test.java:359) 测试只是调用API obejct的方法,该方法返回一个Response对象(来自RESTeasy)。 作为测试框架,我使用TestNG。 测试方法 @Test public void testIfValidAccessTokenReturnsCorrectHTTPHeadersWhenTokenIsNotFound() throws InvalidAccessTokenException { Mockito.when(tokenService.validateAccessToken(TestConstants.ACCESS_TOKEN)).thenThrow(new InvalidAccessTokenException()); Response response = tokenAPI_v1.validateAccessToken(TestConstants.ACCESS_TOKEN, TestConstants.USER_AGENT); assert “no-store”.equals(response.getMetadata().getFirst(“Cache-Control”)); assert “no-cache”.equals(response.getMetadata().getFirst(“Pragma”)); } 问题说明 看起来RESTeasy框架在不同的类加载器中加载RuntimeDelegate。 如果我看一下源代码,那么在RuntimeDelegate(包括第126行)中有以下方法: RuntimeDelegate.java 。 因此,与错误相关的主要语句是instanceof check: if (!(delegate […]

java.lang.NoSuchMethodError:使用Mockito和Junit时的javax.servlet.http.HttpServletRequest.isAsyncStarted()

我试图用TDD弄湿我的脚。 我正在尝试使用Mockito与MockMvc和Junit一起为控制器编写unit testing用例。 但是我收到运行时错误,从而导致测试失败。 起初,由于找不到javax.servlet.SessionCookieConfig ,我在设置中初始化MockMvc实例时遇到了问题。 我通过下载javax.servlet api并将其配置到项目的构建路径来解决,但后来我面临着 java.lang.NoSuchMethodError: javax.servlet.http.HttpServletRequest.isAsyncStarted() 在MockMvc实例上使用perform() 。 任何人都可以告诉我如何处理这种依赖,因为我认为它是由于不兼容的服务器servlet-api和javax.servlet api而发生的。 编辑:我发布我用于unit testing的代码,但我不认为这将是任何帮助,但以防万一: @RunWith(MockitoJUnitRunner.class) public class MyControllerTest { @InjectMocks private MyController myController = new MyController(); @Mock private MyService myService = new MyServiceImpl(); private MockMvc mockMvc; @Before public void setUp(){ this.mockMvc = MockMvcBuilders.standaloneSetup(myController).build(); } @Test public void testList() throws Exception{ A a = […]