﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-JAVA-文章分类-Junit4 单测试</title><link>http://www.blogjava.net/zzzlyr/category/55230.html</link><description /><language>zh-cn</language><lastBuildDate>Mon, 10 Jul 2017 07:05:16 GMT</lastBuildDate><pubDate>Mon, 10 Jul 2017 07:05:16 GMT</pubDate><ttl>60</ttl><item><title>Spring MVC + Junit4 单元测试</title><link>http://www.blogjava.net/zzzlyr/articles/432653.html</link><dc:creator>张钊钊</dc:creator><author>张钊钊</author><pubDate>Mon, 10 Jul 2017 02:17:00 GMT</pubDate><guid>http://www.blogjava.net/zzzlyr/articles/432653.html</guid><wfw:comment>http://www.blogjava.net/zzzlyr/comments/432653.html</wfw:comment><comments>http://www.blogjava.net/zzzlyr/articles/432653.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/zzzlyr/comments/commentRss/432653.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/zzzlyr/services/trackbacks/432653.html</trackback:ping><description><![CDATA[<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;"><strong>前言：JUnit元数据</strong></p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">@Before：&nbsp;<br />
使用了该元数据的方法在每个<a href="http://lib.csdn.net/base/softwaretest" title="软件测试知识库" target="_blank" style="color: #df3434; text-decoration-line: none; font-weight: bold;">测试</a>方法执行之前都要执行一次。&nbsp;<br />
@After：&nbsp;<br />
使用了该元数据的方法在每个测试方法执行之后要执行一次。&nbsp;<br />
注意：@Before和@After标示的方法只能各有一个。这个相当于取代了JUnit以前版本中的setUp和tearDown方法，当然你还可以继续叫这个名字，不过JUnit不会霸道的要求你这么做了。<br />
@Test(expected=*.class)&nbsp;<br />
在JUnit4.0之前，对错误的测试，我们只能通过fail来产生一个错误，并在try块里面assertTrue（true）来测试。现在，通过@Test元数据中的expected属性。expected属性的值是一个异常的类型<br />
@Test(timeout=xxx):&nbsp;<br />
该元数据传入了一个时间（毫秒）给测试方法，&nbsp;<br />
如果测试方法在制定的时间之内没有运行完，则测试也失败。&nbsp;<br />
@ignore：&nbsp;<br />
该元数据标记的测试方法在测试中会被忽略。当测试的方法还没有实现，或者测试的方法已经过时，或者在某种条件下才能测试该方法（比如需要一个<a href="http://lib.csdn.net/base/mysql" title="MySQL知识库" target="_blank" style="color: #df3434; text-decoration-line: none; font-weight: bold;">数据库</a>联接，而在本地测试的时候，数据库并没有连接），那么使用该标签来标示这个方法。同时，你可以为该标签传递一个String的参数，来表明为什么会忽略这个测试方 法。比如：@lgnore(&#8220;该方法还没有实现&#8221;)，在执行的时候，仅会报告该方法没有实现，而不会运行测试方法。、</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;"><strong>一、包含必要地Package</strong></p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">最主要地一个 Package就是org.junit.*，把它包含进来之后，绝大部分功能就有了。还有一句话也非常地重要&#8220;import static org.junit.Assert.*;&#8221;，我们在测试的时候使用的一系列assertEquals方法就来自这个包。大家注意一下，这是一个静态包含 (static)，是JDK5中新增添的一个功能。也就是说，assertEquals是Assert类中的一系列的静态方法</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;"><strong>二、测试类的声明</strong></p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">测试类是一个独立的类，没有任何父类。测试类的名字也可以任意命名，没有任何局限性。它与普通类的区别在于它内部的方法的声明</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;"><strong>三、创建一个待测试的对象</strong></p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">你要测试哪个类，那么你首先就要创建一个该类的对象。</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">private staticCalculator calculator =newCalculator();</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">为了测试Calculator类，我们必须创建一个calculator对象。</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;"><strong>四、测试方法的声明</strong></p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">在测试类中，并不是每一个方法都是用于测试的，你必须使用&#8220;标注&#8221;来明确表明哪些是测试方法。&#8220;标注&#8221;也是JDK5的一个新特性，用在此处非常恰当。我们可以看到，在某些方法的前有@Before、@Test、@Ignore等字样，这些就是标注，以一个&#8220;@&#8221;作为开头。这些标注都是JUnit4自定义 的，熟练掌握这些标注的含义非常重要。</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;"><strong>六、 忽略测试某些尚未完成的方法</strong></p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;"><strong>七、 Fixture(暂且翻译为&#8220;固定代码段&#8221;)</strong></p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">Fixture 的含义就是&#8220;在某些阶段必然被调用的代码&#8221;。&#8220;在任何一个测试执行之前必须执行的代码&#8221;就是一个Fixture，我们用@Before来标注它</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;"><strong>一、 高级Fixture</strong></p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">两个Fixture标注，分别是@Before和@After，是否适合完成如下功能：有一个类是负责对大文件(超过 500兆)进行读写，他的每一个方法都是对文件进行操作。换句话说，在调用每一个方法之前，我们都要打开一个大文件并读入文件内容，这绝对是一个非常耗费时间的操作。如果我们使用@Before和@After，那么每次测试都要读取一次文件，效率及其低下。这里我们所希望的是在所有测试一开始读一次文件， 所有测试结束之后释放文件，而不是每次测试都读文件。JUnit的作者显然也考虑到了这个问题，它给出了@BeforeClass 和 @AfterClass两个Fixture来帮我们实现这个功能。从名字上就可以看出，用这两个Fixture标注的函数，只在测试用例初始化时执行@BeforeClass方法，当所有测试执行完毕之后，执行@AfterClass进行收尾工作。在这里要注意一下，每个测试类只能有一个方法被标注为 @BeforeClass或@AfterClass，并且该方法必须是Public和Static的。</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;"><strong>二、 限时测试</strong></p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">那个求平方根的函数有Bug，是个死循环：</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　public voidsquareRoot(intn) ...{</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(; ;) ;//Bug : 死循环</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　}</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">如果测试的时候遇到死循环，对于那些逻辑很复杂，循环嵌套比较深的程序，很有可能出现死循环，因此一定要采取一些预防措施。我们给这些测试函数设定一个执行时间，超过了这个时间，他们就会被系统强行终止，并且系统还会向你汇报该函数结束的原因是因为超时，这样你就可以发现这些Bug了。只需要给@Test标注加一个参数即可，代码如下：</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　@Test(timeout = 1000)</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　public voidsquareRoot() ...{</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; calculator.squareRoot(4);</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; assertEquals(2,calculator.getResult());</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　}</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　Timeout参数表明了你要设定的时间，单位为毫秒，因此1000就代表1秒。</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;"><strong>三、 测试异常</strong></p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">经常会编写一些需要抛出异常的函数，如果一个函数应该抛出异常，但是它没抛出，当然是Bug。例如，我们写的计算器类有除法功能，如果除数是一个0，那么必然要抛出&#8220;除0异常&#8221;。因此，我们很有必要对这些进行测试。代码如下：</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　@Test(expected = ArithmeticException.class)</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　public void divideByZero() ...{</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; calculator.divide(0);</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　}</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">如上述代码所示，我们需要使用@Test标注的expected属性，将我们要检验的异常传递给他，这样JUnit框架就能自动帮我们检测是否抛出了我们指定的异常。</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;"><strong>四、 Runner (运行器)</strong></p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">把测试代码提交给JUnit框架后，框架如何来运行代码呢?答案就是&#8212;&#8212;Runner。在JUnit中有很多个 Runner，他们负责调用测试代码，每一个Runner都有各自的特殊功能，要根据需要选择不同的Runner来运行测试代码。JUnit中有一个默认Runner，如果没有指定，那么系统自动使用默认 Runner来运行你的代码。换句话说，下面两段代码含义是完全一样的：</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">import org.junit.runner.RunWith;</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">import org.junit.runners.Suite;</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">&nbsp;</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">@RunWith(Suite.class)</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">@Suite.SuiteClasses({</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">MyTestCase.class, //测试类</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">PartSuite.class,&nbsp;//另一个测试套</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">})</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">public class AllTestCases {</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">}</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　 要想指定一个Runner，需要使用@RunWith标注，并且把你所指定的Runner作为参数传递给它。另外一个要注意的 是，@RunWith是用来修饰类的，而不是用来修饰函数的。只要对一个类指定了Runner，那么这个类中的所有函数都被这个Runner来调用。</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;"><strong>五、 参数化测试</strong></p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">一个对考试分数进行评价的函数，返回值分别为&#8220;优秀，良好，一般，及格，不及格&#8221;，因此你在编写测试的时候，至少要写5个测试，把这5中情况都包含了，这 确实是一件很麻烦的事情。我们还使用我们先前的例子，测试一下&#8220;计算一个数的平方&#8221;这个函数，暂且分三类：正数、0、负数。测试代码如下：</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">importorg.junit.AfterClass;</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　importorg.junit.Before;</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　importorg.junit.BeforeClass;</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　importorg.junit.Test;</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　importstatic org.junit.Assert.*;</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　public classAdvancedTest ...{</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private static Calculator calculator =new Calculator();</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @Before</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void clearCalculator() ...{</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; calculator.clear();</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @Test</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void square1() ...{</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; calculator.square(2);</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; assertEquals(4,calculator.getResult());</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @Test</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void square2() ...{</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; calculator.square(0);</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; assertEquals(0, calculator.getResult());</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @Test</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void square3() ...{</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; calculator.square(-3);</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; assertEquals(9,calculator.getResult());</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">}</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">为了简化类似的测试，JUnit4提出了&#8220;参数化测试&#8221;的概念，只写一个测试函数，把这若干种情况作为参数传递进去，一次性的完成测试。代码如下：</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　importstatic org.junit.Assert.assertEquals;</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　importorg.junit.Test;</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　importorg.junit.runner.RunWith;</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　importorg.junit.runners.Parameterized;</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　importorg.junit.runners.Parameterized.Parameters;</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　importjava.util.Arrays;</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　importjava.util.Collection;</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　@RunWith(Parameterized.class)</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　public classSquareTest{</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　private static Calculator calculator = new Calculator();</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private int param;</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private int result;</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @Parameters</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static Collection data(){</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return Arrays.asList(newObject[][]...{</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {2, 4},</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {0, 0},</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {-3, 9},</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; });</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">　　}</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">//构造函数，对变量进行初始化</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;"><strong>六、断言和假设</strong></p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">断言：org.junit.Assert用于测试用例中，如果断言失败，用例即结束。</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">假设：org.junit.Assume用于在准备环境时判断环境是否符合要求，包括测试套的@BeforeClass，测试类的@BeforeClass,测试类的实例化，测试类的@Before。</p>
<p style="margin: 0px; padding: 0px; font-family: Arial; background-color: #ffffff;">如果假设失败，假设所处初始化代码方法立即结束，更深级别的后续工作也被忽略，相关测试用例被忽略，但与假设同级别的收尾工作还要继续执行。&nbsp;<br />
例如：如果在测试类的@BeforeClass中假设失败，该类的实例化及子级别将被忽略，@AfterClass会继续执行。<br />
<strong>七、工程实例<br />&nbsp; &nbsp; &nbsp; </strong>&nbsp;如果不想在单元测试中操作数据库中的数据。可以在测试方法上加&nbsp;<br />&nbsp; &nbsp; &nbsp;@Test</p><p style="margin: 0px; padding: 0px; background-color: #ffffff;"></p><div><div>&nbsp; &nbsp; @Transactional //单元测试 &nbsp;@Transactional 不会进行数据提交事物</div><div>&nbsp; &nbsp; @Rollback(true) // 这个注释可以不用加（单元测试默认值）</div><div>&nbsp; &nbsp; public void testaddUserPrivate()throws Exception{</div><div>&nbsp; &nbsp; &nbsp; &nbsp; UserPrivate userPrivate=new UserPrivate();</div><div>&nbsp; &nbsp; &nbsp; &nbsp; userPrivate.setTenantId("31");</div><div>&nbsp; &nbsp; &nbsp; &nbsp; userPrivate.setMenuCode("7777888");</div><div>&nbsp; &nbsp; &nbsp; &nbsp; userPrivate.setpUid("111222");</div><div>&nbsp; &nbsp; &nbsp; &nbsp; userPrivate.setRoleId("3332277");</div><div>&nbsp; &nbsp; &nbsp; &nbsp; userPrivate.setValue("99999");</div><div>&nbsp; &nbsp; &nbsp; &nbsp; userPrivate.setUpdateDateTime(new Date());</div><div>&nbsp; &nbsp; &nbsp; &nbsp; userPrivate.setCreateDateTime(new Date());</div><div>&nbsp; &nbsp; &nbsp; &nbsp; int s=userPrivateService.addUserPrivate(userPrivate);</div><div>&nbsp; &nbsp; &nbsp; &nbsp; Assert.assertEquals(1, s); // 这是断言的使用</div><div>&nbsp; &nbsp; }</div>&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;</div>
<div></div>
<div></div><img src ="http://www.blogjava.net/zzzlyr/aggbug/432653.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/zzzlyr/" target="_blank">张钊钊</a> 2017-07-10 10:17 <a href="http://www.blogjava.net/zzzlyr/articles/432653.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>