Tag: mockito

JUnit与Mockito,EasyMock等嘲笑

我正在尝试在我正在测试的类中模拟一个对象的方法。 例如 class ClassToTest { public doSomething () { SomeObject a = new SomeObject (); a.doSomethingElse (); } } 有没有办法模拟变量“a”的方法? 我想doSomethingElse在测试期间什么都不做。 我目前正在使用Mockito,但我对任何模拟框架持开放态度。 谢谢

使用Spring时实例化对象,用于测试与生产

我是否正确理解在使用Spring时,您应该使用Spring配置xml来实例化您的对象以进行生产,并在测试时直接实例化对象? 例如。 MyMain.java package org.world.hello; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MyMain { private Room room; public static void speak(String str) { System.out.println(str); } public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext(“Beans.xml”); Room room = (Room) context.getBean(“myRoom”); speak(room.generatePoem()); } } Room.java package org.world.hello; public class Room { private BottleCounter bottleCounter; private int […]

使用PowerMockito模拟java.lang.Runtime

想为像这样的方法编写unit testing public static void startProgram() { process = Runtime.getRuntime().exec(command, null, file); } 我不想因为某些原因注入运行时对象,所以我想将getRuntime方法存根,它返回一个Runtime mock …我试过这样: @RunWith(PowerMockRunner.class) @PrepareForTest(Runtime.class) public class ProgramTest { @Test public void testStartProgram() { Runtime mockedRuntime = PowerMockito.mock(Runtime.class); PowerMockito.mockStatic(Runtime.class); Mockito.when(Runtime.getRuntime()).thenReturn(mockedRuntime); … //test } } 但这不起作用。 实际上似乎没有任何东西被嘲笑。 在测试中,使用正常的Runtime对象。 任何人都知道为什么这不起作用和/或它是如何工作的? 由于这个小例子似乎没有重现问题,这里是完整的测试代码:测试方法(缩短) public static synchronized long startProgram(String workspace) { // Here happens someting with Settings […]

如何模拟MyBatis映射器接口?

我正在为我的Jersey rest API编写unit testing,该API在后台使用MyBatis。 这是我的课程结构: rest服务: @Path(“/api”) public class HelloRestService { @Inject HelloBean helloBean; @GET @Path(“/echo/{name}”) public Response echo(@PathParam(“name”) String name) { return Response.status(200).entity(helloBean.sayHello(name)).build(); } } 无状态EJB: @Stateless public class HelloStatelessBean implements HelloBean { // Injected MyBatis mapper (dao) @Inject private EmployeeMapper employeeMapper; @Override public Employee getEmployeeById(final Long id) { return employeeMapper.getEmployeeById(id); } @Override public […]

CompletableFuture可用性和unit testing

我正在学习java 8 CompletableFuture并最终得到了这个。 所有的拳头,您如何看待这行代码? 我需要并行向不同的服务发送请求,然后等待所有服务响应并继续工作。 //service A CompletableFuture serviceAFuture = CompletableFuture.supplyAsync( () -> this.ServiceA.retrieve(serviceARequest), serviceAExecutorService ); //service B CompletableFuture serviceBFuture = CompletableFuture.supplyAsync( () -> this.ServiceB.retrieve(serviceBRequest), serviceBExecutorService ); CompletableFuture.allOf(serviceAFuture, serviceBFuture).join(); ServiceAResponse responseA = serviceAFuture.join(); ServiceBResponse responseB = serviceBFuture.join(); 甚至代码都在做我想要的,我在测试代码所在的类时遇到了问题。 我尝试使用Mockito并执行以下操作: doAnswer(invocation -> CompletableFuture.completedFuture(this.serviceAResponse)) .when(this.serviceAExecutorService) .execute(any()); 执行程序服务和服务响应在嘲笑,但测试永远不会结束,并且线程一直在等待这一行 CompletableFuture.allOf(serviceAFuture, serviceBFuture).join(); 我在这里缺少的任何暗示? 谢谢!

如何模拟接口Java PowerMockito

我试图模拟一个界面。 public interface FlowCopyParamsBusinessManager { List findByAppli(String application, String sourcePattern) throws FlowCopyParamsBusinessException; } 在我的代码中,当我调用此方法findByAppli时 ,我想返回一个FlowCopyParams列表。 List lstFlowCopyParams = flowCopyParamsBusinessManager.findByAppli( “TOTO”,”TATA); 在这里我尝试了类测试: @BeforeClass public static void mockBeanIn() throws Exception { List flowCopyParamsList = new ArrayList(); PowerMockito.spy(FlowCopyParamsBusinessManager.class); PowerMockito.when(FlowCopyParamsBusinessManager.class, “findByAppli”, Mockito.anyString(), Mockito.anyString()).thenReturn(flowCopyParamsList); } 我有这个错误: java.lang.IllegalArgumentException: object is not an instance of declaring class 我不知道为什么因为方法findByAppli必须有两个字符串参数 ,我把Mockito.anyString()和我仍然有IllegalArgumentException 。 任何线索? Thxs。

如何模拟私有内部类

我有一个spring应用程序,我想在像这样的控制器上创建一个单一的测试。 问题是Wrapper类是一个私有内部类,因此在测试中不了解Wrapper。 是否可以在不更改控制器类的情况下使用Mockito进行模拟。 我可以使用prepareData()来获取对象的实例,但我不知道是否可以使用它来模拟该对象。 谢谢 @Controller public class Controller { private class Wrapper { private Object1 field1; private Object2 field2; private Object1 method1(){ … } private Object2 method1(){ … } } @ModelAttribute(“data”) public Wrapper prepareData() { return new Wrapper (); } public String save(@ModelAttribute(“data”) Wrapper wrapper, BindingResult result, Model model){ … } } 所以在我的测试中我会有类似的东西 @Test […]

模拟CGLIB增强对象

mockito无法模拟CGLIB已经增强的对象吗? public class Article { @Autowired private dbRequestHandler @Autowired private filesystemRequestHandler @Transactional public ArticleDTO getArticleContents() { //extractText() and then save the data in DTO //extractImages() and then save the data in DTO // some other calls to other databases to save data in dto return articleDTO; } public void extractText() { //call to DB } […]

Mockito returnFirstArg()使用

我已经开始使用Mockito AdditionalAnswers#returnsFirstArg ,这很棒: when(myMock.myFunction(anyString())).then(returnsFirstArg()); 但我想知道是否有一种简单的方法来提取输入参数,以便在例如构造函数中使用: when(myMock.myFunction(anyString())).thenReturn(new MyObject((String)returnsFirstArg())); (这显然不起作用……)

是否有针对varargsarrays的Mockito eq匹配器?

尝试将作为参数传递的数组匹配到接收varargs数组的方法时,我遇到了问题。 其他问题/答案中提到的anyVararg()匹配器对我不起作用,因为我想确保提供的数组是我需要的数组。 我将问题简化为这个更易于理解和抽象问题的例子(我的真正问题是生产代码并且具有业务逻辑,因此对于这个问题的目的而言会令人困惑): @RunWith(MockitoJUnitRunner.class) public class UnitTest { private Object[] objectArray; private List expected; private TestTarget target; @Before public void setUp() { objectArray = new Object[]{ new Object() }; expected = Arrays.asList(new Object(), new Object()); target = Mockito.spy(new TestTarget()); } @Test public void testMakeList() { // this pass as eq works well with normal array […]