MavenEclipJunit单元测试解+进阶使⽤Mockito做rvice层单测。。。⼀:简介
JUnit是⼀个JAVA语⾔的单元测试框架 主要是后端写完代码可以⾃⼰测试⼀下功能。
⼆:配置
2.1 引⼊
在 pom⽂件⾥引⼊依赖包
<dependency>
<groupId>junit</groupId>
英语小笑话带翻译
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
2.2 ⽣成test⽂件
培训师 英文英文缩写⽣成测试类
对着你的test⽂件夹右键vagar
然后你发现没有别怕 点other 然后搜索⼀下 junit ,然后选Junit test ca
三:使⽤
3.1 TEST标准样式
冬季服装搭配图片打开这个⾃动⽣成的⽂件,package⼀定要弄对 和你要测试的代码对应
JUnit4使⽤Java5中的注解(annotation),以下是JUnit4常⽤的⼏个annotation:
@Before:初始化⽅法 对于每⼀个测试⽅法都要执⾏⼀次(注意与BeforeClass区别,后者是对于所有⽅法执⾏⼀次)@After:释放资源 对于每⼀个测试⽅法都要执⾏⼀次(注意与AfterClass区别,后者是对于所有⽅法执⾏⼀次)
@Test:测试⽅法,在这⾥可以测试期望异常和超时时间
@Test(expected=ArithmeticException.class)检查被测⽅法是否抛出ArithmeticException异常
@Ignore:忽略的测试⽅法
@BeforeClass:针对所有测试,只执⾏⼀次,且必须为static void
@AfterClass:针对所有测试,只执⾏⼀次,且必须为static void
⼀个JUnit4的单元测试⽤例执⾏顺序为:
@BeforeClass -> @Before -> @Test -> @After -> @AfterClass;
每⼀个测试⽅法的调⽤顺序为:
@Before -> @Test -> @After;
public class orderTest {
/**
* @throws java.lang.Exception
*/
@Before
get的过去式public void tUp()throws Exception {
System.out.print("start test");
}
/**
* @throws java.lang.Exception
*/
@After
public void tearDown()throws Exception { System.out.print("End test");
}
@Test
public void test(){
//asrtArrayEquals(expecteds, actuals); //fail("Not yet implemented");
}
}
在⾥⾯写点内容测试⼀下
console可以看到打印出了提⽰
Junit显⽰了这个测试
3.2 具体测试
要确定⾃⼰需要测试的层
是rvice层,还是dao层,还是接⼝层四进阶Mockito
为了更好的解决以上问题,我们引⽤mockito
我们先来看下Mock和Junit结合之后⼤概长什么
/**
*
*/
import java.util.ArrayList;
honestly
import java.util.List;
import junit.framework.Asrt;
import junit.framework.Asrt;
import org.junit.After;
import org.junit.Before;bdy
清明节用英语怎么说import org.junit.Test;
kito.InjectMocks;
kito.Mock;
kito.Mockito;
kito.MockitoAnnotations;
dao.OrderMapper;
vice.impl.OrderImpl;
vo.order.OrderQueryVo;
vo.order.OrderResultVo;
public class orderServiceTest {
@InjectMocks//需要测试的Service实现类
private OrderImpl OrderImpl;
@Mock// rvice中调⽤的mapper类
private OrderMapper orderMapper;
/**
* @throws java.lang.Exception
*/
@Before
public void tUp()throws Exception {
System.out.print("start test");
//初始化Mockito
/
/或者使⽤@RunWith(MockitoJunitRunner.class)
MockitoAnnotations.initMocks(this);
}
/**
* @throws java.lang.Exception
*/
@After
public void tearDown()throws Exception {
System.out.print("End test");
}
@Test
public void testGetList()throws ServiceBizException{
//创建返回的模拟数据
OrderQueryVo orderQueryVo =new OrderQueryVo();
OrderResultVo mockOrderResultVo =new OrderResultVo();
List<OrderResultVo> mockOrderResultVos =new ArrayList<OrderResultVo>();
//mockOrderResultVos.add(mockOrderResultVo);
orderQueryVo.tVin("");
Mockito.ListInmapper(Mockito.any(OrderQueryVo.class))).thenReturn(mockOrderResultVos);
//当rvice调⽤mapper的时候会返回上⾯的数据要将所有rvice⽅法⾥调⽤到mapper的情况都⽤when写好
//意思就是when调⽤到这个mapper的时候thenReturn这个list 这样⽅法就不会真的去dao层查数据了,⽽是返回你造的数据//Mockito.any(xxx.class)这⾥不需要定义xxx内容是什么,只要符合mapper⽅法的
⼊参类就⾏
List<OrderResultVo> returnList = List(orderQueryVo);
//真的去运⾏rviceImpl⾥⾯的⽅法,当遇到需要跑mapper⽅法的时候就会去找上⾯造好的假数据
Asrt.asrtEquals(预计的return结果, returnList);
//验证结果是否正确
Mockito.verify(orderMapper,Mockito.times(1)).getList(Mockito.any(OrderQueryVo.class));
}
}recently什么意思