php网站目录系统,西宁网站建设费用,wordpress主题怎么设置,曲靖seo建站Jmockit使用笔记_基本功能使用Tested_Injectable_Mocked_Expectations_jmockit.class-CSDN博客
静态变量直接赋值就好#xff0c;没必要mock了
测试框架Jmockit集合junit使用
RunWith(JMockit.class)
写在测试案例类上的注解
Tested
在测试案例中,写在我们要测试的类上…Jmockit使用笔记_基本功能使用Tested_Injectable_Mocked_Expectations_jmockit.class-CSDN博客
静态变量直接赋值就好没必要mock了
测试框架Jmockit集合junit使用
RunWith(JMockit.class)
写在测试案例类上的注解
Tested
在测试案例中,写在我们要测试的类上面, 一般用实现类
Injectable
在测试案例中声明那些我们要测试的类中通过Autowired注入的类 原文链接https://blog.csdn.net/Java_XiaoBei/article/details/126150129
/*** author: xinruoxiangyang9010* 测试案例*/
RunWith(JMockit.class)
public class MyServicemplTest {Injectableprivate MyMapper myMapper;Testedprivate MyServicempl myServicempl;Testpublic void testMethod() {String result myServicempl.testMethod();assertEquals(myService, result);}
}2. 必须加 RunWith(JMockit.class) 的情况
使用 JUnit 4 如果你的项目是基于 JUnit 4 的测试框架而测试类中使用了 JMockit 提供的注解如 Mocked、Injectable或 API如 Expectations、Verifications则必须加上 RunWith(JMockit.class)。原因 JUnit 4 默认使用 BlockJUnit4ClassRunner 运行器而 JMockit 的特性需要通过 JMockitTestRunner 扩展运行器支持。如果不加 RunWith(JMockit.class)JMockit 的增强功能不会生效。
测试类中不使用 JMockit 特性 如果你的测试没有使用 JMockit 的 Mocked、Injectable、Tested 或其他功能只是普通的单元测试则可以不加 RunWith(JMockit.class)。 Expectations:返回他的result
在 JMockit 的 Expectations 中如果没有为方法设置返回值result或将 result 设置为 null则会根据方法的签名返回以下内容 1. 没有指定 result 的情况
new Expectations(MyStringUtil.class) {{MyStringUtil.getUUID(); // 没有设置 result
}};
String resultString MyStringUtil.getUUID();
assertEquals(null, resultString); // 返回 null如果没有显式设置 result默认行为是方法返回类型的默认值 基本类型如 int、double返回其默认值0 或 0.0。对象类型返回 null。void 方法不会有返回值。 ------------------
如果是void 方法不能设置 result 值因为它不返回任何内容。如果你尝试为 void 方法设置 resultJMockit 会抛出异常。java.lang.IllegalArgumentException: Attempted to specify a result for a void method.对于 void 方法你可以使用 Verifications 来验证方法的调用行为。
Test
public void voidMethodTest() {new Expectations() {{// 模拟任何期望但不设置返回值MyStringUtil.doSomething();}};// 调用 void 方法MyStringUtil.doSomething();// 验证 void 方法是否被调用new Verifications() {{MyStringUtil.doSomething(); // 验证是否调用times 1; // 验证调用次数}};
}这段代码就是检查doSomething()是否调用了1次times2就是检查是否用了两次 下面这段代码太好了:
结合Expectations的使用对Mocked与Injectable的不同
/*** author: xinruoxiangyang9010* 测试案例*/
RunWith(JMockit.class)
public class MockAndInjectTest {Testpublic void testMock(Mocked DiffServiceImpl diffService) {new Expectations() {{diffService.method();result mockMethod;}};assertEquals(mockMethod, diffService.method());// Mocked修饰的变量,即便是再new出来的,也会按照上面我们mock的结果返回assertEquals(mockMethod, new DiffServiceImpl().method());}Testpublic void testInjectable (Injectable DiffServiceImpl diffService) {new Expectations() {{diffService.method();result mockMethod;}};assertEquals(mockMethod, diffService.method());// 注意这里结果的不同, 在对Injectable修饰的对象进行Expectations指定结果时// 受影响的只是被修饰的对象,如果我们new一个示例出来,是不会受Expectations影响的assertEquals(real, new DiffServiceImpl().method());}
}这里写的也很好
JMockit单元测试详解-CSDN博客
基本流程
record录制---- replay回放 ---- verify验证 record : 设置将要被调用的方法和返回值。 Expections中的方法至少被调用一次否则会出现missing invocation错误。调用次数和调用顺序不限。StrictExpectations中方法调用的次数和顺序都必须严格执行。如果出现了在StrictExpectations中没有声明的方法会出现unexpected invocation错误。 replay调用未被录制的方法被录制的方法调用会被JMockit拦截并重定向到record阶段设定的行为。 verify基于行为的验证测试CUT是否正确调用了依赖类包括调用了哪些方法通过怎样的参数;调用了多少次;调用的相对顺序VerificationsInOrder等。可以使用timesminTimesmaxTimes来验证。 RunWith(JMockit.class): 指定单元测试的执行类为JMockit.class。 Tested: 指定被测试类同时mock实例并注入测试类依赖的类使用Injectable注入。 Injectable: 将对象进行mock并注入测试类。 Mockedmock一种类型并注入测试类。 Mocked与Injectable区别
Mocked 注入的依赖类的所有实例都被mockrecord的方法在replay时按照record的结果返回没有record的方法返回默认值。Injectable 注入的依赖只mock指定的实例record的方法在replay时按照record的结果返回没有record的方法返回默认值。没有mock的实例调用其原始方法。