企业网站建设需要哪些步骤,wordpress首页慢,成都百度seo代理,网站被降权重新做网站工作记录------单元测试
之前的工作中从来没有写过单元测试#xff0c;新入职公司要求写单元测试#xff0c; 个人觉得#xff0c;作为程序员单元测试还是必须会写的 于此记录一下首次编写单元测试的过程。
首先引入单元测试相关的依赖 dependencygroupId…工作记录------单元测试
之前的工作中从来没有写过单元测试新入职公司要求写单元测试 个人觉得作为程序员单元测试还是必须会写的 于此记录一下首次编写单元测试的过程。
首先引入单元测试相关的依赖 dependencygroupIdorg.mockito/groupIdartifactIdmockito-all/artifactIdscopetest/scope/dependencydependencygroupIdjunit/groupIdartifactIdjunit/artifactIdscopetest/scope/dependency其次创建test目录
在src目录下创建与main同级的目录。 其中test/java目录下编写测试类 test/resources目录下放置测试所需要的配置文件。 test/java与main/java目录层级结构保持一致。 区别在于测试类以Test结尾。
测试类编写
RunWith(MockitoJUnitRunner.class)
public class ATest {private static final Logger LOGGER LoggerFactory.getLogger(A.class);InjectMocksprivate A a;Mockprivate B b;Mockprivate C c;Mockprivate D d;Mockprivate E e;Mockprivate F f;private H h new H();Testpublic void testGetType() {Enum type a.getType();boolean equals type.equals(Enum.SAVE);Mockito.when(d.d(Mockito.anyString(), Mockito.any(), Mockito.any())).thenReturn(123456789);AppLogUtil.info(LOGGER, Enum.SAVE result:{}, equals);}Beforepublic void init() {MockitoAnnotations.initMocks(this);f.setB(aaa);}首先在文件头声明这是一个测试类RunWith(MockitoJUnitRunner.class) 这是一个A类的测试类所以文件名为ATest。 InjectMocks 作用是注入mock 意味着在测试过程中进入A类时A类中所涉及的引用都是有值的不为null指的是A类中的B-F。 Mock 就是模拟这个引用的依赖用于Test类 Before 执行Test方法前先执行的步骤一般用于参数构建以及mock注入MockitoAnnotations.initMocks(this);这句话与InjectMocks相结合使用表明注入模拟A类。 Test: 指的是拥有这个注解的方法就是测试方法通过这个方法对A类中的具体方法进行测试而方法名一般为“test方法名”。需要传递参数的话就需要先构建对应的参数。 而由于A类中涉及到了很多依赖的调用此时我们也需要mock返回参数使得流程能正常的跑下去。 由此能够看出单元测试只针对当前一个方法的逻辑不会延伸到引用调用的方法。 当遇到其他引用的方法调用时也需要mock比如执行到D类的d方法就需要Mockito.when(d.d(Mockito.anyString(), Mockito.any(), Mockito.any())).thenReturn(“123456789”);根据这个语句能够看出d方法需要三个参数该方法需要几个参数就传入几个参数。thenReturn代表模拟的返回值。
问题如果在A类中调用B引用的select方法两次一次返回null一次返回有值应该怎么操作
答案 Mockito.when(B.select(Mockito.anyString())).thenReturn(null).thenReturn(dto); 通过两次thenReturn方法第一次则会返回第一次thenReturn的结果第二次会返回第二次thenReturn的结果 此时dto需要自行new