Tag: mockito

Mockito:当调用方法Aa时,执行Bb

我正在使用Mockito进行JUnit测试。 所以从我想要测试的代码中使用给定的A类: class A{ public A(){} public final String a(String x){ return “Aa: ” + x; } } 我想用另一个方法调用替换方法调用Aa与相同的参数和相同类型的返回值。 正如您所看到的,不可能通过扩展类来覆盖方法a,因为它是最终的。 所以我现在拥有的另一个B类方法是Bb: class B{ public B(){} public String b(String x){ return “Bb: ” + x; } } 现在我想确保每次从代码中调用Aa时,都会使用Bb的返回值。 是否有可能通过Mockito实现这一点(类似于Mockito.when(Aa(x)).thenReturn(Bb(x)); )但是使用相同的参数x,却不知道x的值? 任何帮助将不胜感激,谢谢你提前!

Mockitovalidation在我的情况下调用一次函数

我正在使用Mockito来编写我的测试用例。 我有一个简单的类,其中包含一个函数countPerson(boolean) ,我有兴趣测试它: public class School { //School is a singleton class. public void countPerson(boolean includeTeacher) { if (includeTeacher) { countIncludeTeacher(); return; } countOnlyStudents(); } public void countIncludeTeacher() {…} public void countOnlyStudents() {…} } 在我的unit testing中,我想测试countPerson(boolean)函数: public class SchoolTest{ private School mSchool; @Before public void setUp(){ mSchool = School.getInstance(); } @Test public void testCountPerson() { […]

由于代理而导致Spring Bean注入失败

Spring版本 :3.2.4.RELEASE和3.2.9.RELEASE Mockito版本 :1.8.5 我一直在尝试将H2测试引入到旧项目进行集成测试,我遇到了一些问题。 由于事务的传播方式,我需要模拟一个自动连接的类。 我以前做过这个,但我现在遇到了严重的问题。 初始化测试时抛出以下错误消息: org.springframework.beans.factory.BeanCreationException:创建名为’com.stuff.XMLITCase’的bean时出错:资源dependency injection失败; 嵌套exception是org.springframework.beans.factory.BeanNotOfRequiredTypeException: 名为’TheProcessor’的Bean必须是[com.stuff.XMLBatchFileProcessor]类型,但实际上是 org.springframework.context.annotation.CommonAnnotationBeanPostProcessor中的[$ Proxy118]类型 。 postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:307) 深入研究这一点,事实certificatebean实际上是一个代理。 如果我们检查AbstractBeanFactory(第239行),我们可以看到代理: sharedInstance = {$ Proxy117 @ 7035}“com.stuff.XMLBatchFileProcessor@66c540d0”h = {org.springframework.aop.framework.JdkDynamicAopProxy@7039} 唯一的问题是,我不知道这是从哪里来的。 我已经查看了配置和依赖项,无法找到应该发生的任何地方。 项目设置 不幸的是,我无法为此提供示例项目,但我会检查我的测试配置。 我有一个我为测试扩展的根类: @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {“classpath:/spring/spring-test-context.xml”}) @TransactionConfiguration(transactionManager = “transactionManager”, defaultRollback = true) public abstract class AbstractIntegrationTest { } 这只是在一些spring配置中加载并在每次测试后回滚事务。 spring配置也没什么奇怪的,虽然我的另一个模块和这个模块之间有一个区别。 这是事务管理器和会话工厂: … 在我的其他模块中,我使用的是entityManagerFactory,以及不同的事务管理器: … 实际的类有一些自动assembly的字段,以及通常的@Service注释: @Service(value […]

使用Scanner对用户输入进行junit测试

我必须在类中测试一个方法,该方法使用Scanner类进行输入。 package com.math.calculator; import java.util.Scanner; public class InputOutput { public String getInput() { Scanner sc = new Scanner(System.in); return sc.nextLine(); } } 我想使用JUnit测试它,但不知道如何做到这一点。 我尝试使用以下代码,但它不会工作。 package com.math.calculator; import org.junit.Test; import static org.junit.Assert.assertEquals; public class InputOutputTest { @Test public void shouldTakeUserInput() { InputOutput inputOutput= new InputOutput(); assertEquals(“add 5”, inputOutput.getInput()); } } 我也想和Mockito一起尝试(使用模拟……当…然后返回)但不知道该怎么做。

如何使用Mockito和JUnit检查方法中的if语句?

我有方法,我应该测试。 代码(当然有些部分被删除): public class FilterDataController { public static final String DATE_FORMAT = “yyyy-MM-dd”; @Autowired private FilterDataProvider filterDataProvider; @ApiOperation(value = “Get possible filter data”,response = ResponseEntity.class) @ApiResponses(value = { @ApiResponse(…), @ApiResponse(…)}) @RequestMapping(path = “…”, method = RequestMethod.GET) public ResponseEntity getPossibleFilterData( @RequestParam(value = “startDate”) @DateTimeFormat(pattern=DATE_FORMAT) final Date startDate, @RequestParam(value = “endDate”) @DateTimeFormat(pattern=DATE_FORMAT) final Date endDate) { if […]

编写JUnit测试用例请求调度程序时出错

在为Request调度程序编写测试用例时,我遇到了一些错误。 我的课 @Override public void doFilter(ServletRequest request, ServletResponse resp, FilterChain chain) throws IOException, ServletException { if(isMockAccountEnabled()) { HttpServletRequest req = (HttpServletRequest)request; String reqUrl = req.getRequestURI(); ApiUserDetails userDetails = userBean.getUserDetails(); HttpSession session = req.getSession(); if(isThisTestAccount(reqUrl, session)) { log.info(userDetails); log.debug(“Entering Test acount flow for the request “+reqUrl); RequestDispatcher dispatcher = req.getRequestDispatcher(“/mock/” + EnumService.returnMockService(reqUrl)); dispatcher.forward(request, resp); } } […]

Mockito模拟SecurityManager抛出exception

我正在尝试模拟SecurityManager类。 当我运行以下代码时,Mockito会抛出exception: @After public void tearDown() { SecurityManager securityManagerMock = mock(SecurityManager.class); System.setSecurityManager(securityManagerMock); } 堆栈跟踪是无限重复的以下行: at org.mockito.internal.creation.MethodInterceptorFilter.intercept(MethodInterceptorFilter.java:42) at $java.lang.SecurityManager$$EnhancerByMockitoWithCGLIB$$3ceafc0f.checkMemberAccess() at java.lang.Class.checkMemberAccess(Class.java:2157) at java.lang.Class.getDeclaredField(Class.java:1879) at org.mockito.internal.creation.cglib.CGLIBHacker.reflectOnCreateInfo(CGLIBHacker.java:44) at org.mockito.internal.creation.cglib.CGLIBHacker.setMockitoNamingPolicy(CGLIBHacker.java:20) at org.mockito.internal.creation.MethodInterceptorFilter.intercept(MethodInterceptorFilter.java:42) at $java.lang.SecurityManager$$EnhancerByMockitoWithCGLIB$$3ceafc0f.checkMemberAccess() at java.lang.Class.checkMemberAccess(Class.java:2157) at java.lang.Class.getDeclaredField(Class.java:1879) at org.mockito.internal.creation.cglib.CGLIBHacker.reflectOnCreateInfo(CGLIBHacker.java:44) at org.mockito.internal.creation.cglib.CGLIBHacker.setMockitoNamingPolicy(CGLIBHacker.java:20) at org.mockito.internal.creation.MethodInterceptorFilter.intercept(MethodInterceptorFilter.java:42) at $java.lang.SecurityManager$$EnhancerByMockitoWithCGLIB$$3ceafc0f.checkMemberAccess() at java.lang.Class.checkMemberAccess(Class.java:2157) at java.lang.Class.getDeclaredField(Class.java:1879) at org.mockito.internal.creation.cglib.CGLIBHacker.reflectOnCreateInfo(CGLIBHacker.java:44) at org.mockito.internal.creation.cglib.CGLIBHacker.setMockitoNamingPolicy(CGLIBHacker.java:20) 我在这做错了什么?

如何在Java中模拟静态方法?

我有一个类FileGenerator ,我正在为generateFile()方法编写一个测试,它应该执行以下操作: 1)它应该在BlockAbstractFactory上调用静态方法getBlockImpl(FileTypeEnum) 2)它应该从子类方法getBlocks()填充变量blockList 3)它应该从最终帮助器类FileHelper调用一个静态方法createFile传递一个String参数 4)它应该调用BlockController中每个BlockController的run方法 到目前为止,我有这个空方法: public class FileGenerator { // private fields with Getters and Setters public void generateBlocks() { } } 我正在使用JUnit,Mockito来模拟对象,我尝试使用PowerMockito来模拟静态和最终类(Mockito不这样做)。 我的问题是:我的第一个测试(来自BlockAbstractFactory调用方法getBlockList() )正在传递,即使generateBlocks()没有实现。 我已经在BlockAbstractFactory实现了静态方法(到目前为止返回null),以避免Eclipse语法错误。 如何测试在fileGerator.generateBlocks()是否调用静态方法? 到目前为止,这是我的测试类: @RunWith(PowerMockRunner.class) public class testFileGenerator { FileGenerator fileGenerator = new FileGenerator(); @Test public void shouldCallGetBlockList() { fileGenerator.setFileType(FileTypeEnum.SPED_FISCAL); fileGenerator.generateBlocks(); PowerMockito.mockStatic(BlockAbstractFactory.class); PowerMockito.verifyStatic(); BlockAbstractFactory.getBlockImpl(fileGenerator.getFileType()); } }

如何使用PowerMock和Mockito模拟枚举类的实例?

我试着按照这个非常相似的问题的答案提供的例子,但它对我不起作用。 我收到以下错误消息: java.lang.IllegalArgumentException: Cannot subclass final class class com.myproject.test.support.ExampleEnumerable at org.mockito.cglib.proxy.Enhancer.generateClass(Enhancer.java:447) at org.mockito.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25) at org.mockito.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:217) at org.mockito.cglib.proxy.Enhancer.createHelper(Enhancer.java:378) at org.mockito.cglib.proxy.Enhancer.createClass(Enhancer.java:318) at org.powermock.api.mockito.repackaged.ClassImposterizer.createProxyClass(ClassImposterizer.java:123) at org.powermock.api.mockito.repackaged.ClassImposterizer.imposterise(ClassImposterizer.java:57) at org.powermock.api.mockito.internal.mockcreation.MockCreator.createMethodInvocationControl(MockCreator.java:110) at org.powermock.api.mockito.internal.mockcreation.MockCreator.mock(MockCreator.java:58) at org.powermock.api.mockito.PowerMockito.mock(PowerMockito.java:143) 我需要一个enum class的简单模拟实例。 我不需要模拟它的任何方法。 这是我想要模拟的类: public enum ExampleEnumerable implements IEnumerable { EXAMPLE_ENUM_1(“Test Enum 1”), EXAMPLE_ENUM_2(“Test Enum 2”); final String alias; ExampleEnumerable(final String alias) { this.alias = alias; […]

Mockito,Java 9和java.lang.ClassNotFoundException:sun.reflect.ReflectionFactory

我的项目是Wildfly 13应用程序,它使用Mockito测试库。 该应用程序不使用Java 9模块结构。 只要服务器在Java 8上运行,测试工作正常,但是一旦我们升级到Java 9,它们就会失败并出现以下exception: org.objenesis.ObjenesisException: java.lang.ClassNotFoundException: sun.reflect.ReflectionFactory from [Module “test.war” from Service Module Loader] at test.war//org.objenesis.instantiator.sun.SunReflectionFactoryHelper.getReflectionFactoryClass(SunReflectionFactoryHelper.java:63) at test.war//org.objenesis.instantiator.sun.SunReflectionFactoryHelper.newConstructorForSerialization(SunReflectionFactoryHelper.java:37) at test.war//org.objenesis.instantiator.sun.SunReflectionFactoryInstantiator.(SunReflectionFactoryInstantiator.java:41) at test.war//org.objenesis.strategy.StdInstantiatorStrategy.newInstantiatorOf(StdInstantiatorStrategy.java:68) at test.war//org.objenesis.ObjenesisBase.getInstantiatorOf(ObjenesisBase.java:94) at test.war//org.objenesis.ObjenesisBase.newInstance(ObjenesisBase.java:73) at test.war//org.mockito.internal.creation.instance.ObjenesisInstantiator.newInstance(ObjenesisInstantiator.java:19) at test.war//org.mockito.internal.creation.bytebuddy.SubclassByteBuddyMockMaker.createMock(SubclassByteBuddyMockMaker.java:47) at test.war//org.mockito.internal.creation.bytebuddy.ByteBuddyMockMaker.createMock(ByteBuddyMockMaker.java:25) at test.war//org.mockito.internal.util.MockUtil.createMock(MockUtil.java:35) at test.war//org.mockito.internal.MockitoCore.mock(MockitoCore.java:68) at test.war//org.mockito.Mockito.mock(Mockito.java:1895) at test.war//org.mockito.Mockito.mock(Mockito.java:1804) at test.war//application code… 我尝试了各种选项和组合: 使用Java 8,9,10进行编译 运行最新版本的OpenJDK 9和10 设置编译器和vm选项–add-modules jdk.unsupported和–add-exports jdk.unsupported / […]