知识大全 Java标准单元测试库 JUnit 4 抢先看
Posted 知
篇首语:努力一点,现在想要的以后你都会有。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java标准单元测试库 JUnit 4 抢先看相关的知识,希望对你有一定的参考价值。
Java标准单元测试库 JUnit 4 抢先看 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
JUnit 是 Java? 语言事实上的 标准单元测试库 JUnit 是该库三年以来最具里程碑意义的一次发布 它的新特性主要是通过采用 Java 中的标记(annotation)而不是利用子类 反射或命名机制来识别测试 从而简化测试 在本文中 执著的代码测试人员 Elliotte Harold 以 JUnit 为例 详细介绍了如何在自己的工作中使用这个新框架 注意 本文假设读者具有 JUnit 的使用经验 JUnit 由 Kent Beck 和 Erich Gamma 开发 几乎毫无疑问是迄今所开发的最重要的第三方 Java 库 正如 Martin Fowler 所说 在软件开发领域 从来就没有如此少的代码起到了如此重要的作用 JUnit 引导并促进了测试的盛行 由于 JUnit Java 代码变得更健壮 更可靠 bug 也比以前更少 JUnit(它本身的灵感来自 Smalltalk 的 SUnit)衍生了许多 xUnit 工具 将单元测试的优势应用于各种语言 nUnit ( NET) pyUnit (Python) CppUnit (C++) dUnit (Delphi) 以及其他工具 影响了各种平台和语言上的程序员的测试工作 然而 JUnit 仅仅是一个工具而已 真正的优势来自于 JUnit 所采用的思想和技术 而不是框架本身 单元测试 测试先行的编程和测试驱动的开发并非都要在 JUnit 中实现 任何比较 GUI 的编程都必须用 Swing 来完成 JUnit 本身的最后一次更新差不多是三年以前了 尽管它被证明比大多数框架更健壮 更持久 但是也发现了 bug 而更重要的是 Java 不断在发展 Java 语言现在支持泛型 枚举 可变长度参数列表和注释 这些特性为可重用的框架设计带来了新的可能 JUnit 的停滞不前并没有被那些想要废弃它的程序员所打败 挑战者包括 Bill Venners 的 Artima SuiteRunner 以及 Cedric Beust 的 TestNG 等 这些库有一些可圈可点的特性 但是都没有达到 JUnit 的知名度和市场占有份额 它们都没有在诸如 Ant Maven 或 Eclipse 之类的产品中具有广泛的开箱即用支持 所以 Beck 和 Gamma 着手开发了一个新版本的 JUnit 它利用 Java 的新特性(尤其是注释)的优势 使得单元测试比起用最初的 JUnit 来说更加简单 用 Beck 的话来说 JUnit 的主题是通过进一步简化 JUnit 鼓励更多的开发人员编写更多的测试 JUnit 尽管保持了与现有 JUnit 测试套件的向后兼容 但是它仍然承诺是自 JUnit 以来 Java 单元测试方面最重大的改进 注意 该框架的改进是相当前沿的 尽管 JUnit 的大轮廓很清晰 但是其细节仍然可以改变 这意味着本文是对 JUnit 抢先看 而不是它的最终效果 测试方法 以前所有版本的 JUnit 都使用命名约定和反射来定位测试 例如 下面的代码测试 + 等于 import junit framework TestCase; public class AdditionTest extends TestCase private int x = ; private int y = ; public void testAddition() int z = x + y; assertEquals( z); 而在 JUnit 中 测试是由 @Test 注释来识别的 如下所示 import junit Test; import junit framework TestCase; public class AdditionTest extends TestCase private int x = ; private int y = ; @Test public void testAddition() int z = x + y; assertEquals( z); 使用注释的优点是不再需要将所有的方法命名为 testFoo() testBar() 等等 例如 下面的方法也可以工作 import junit Test; import junit framework TestCase; public class AdditionTest extends TestCase private int x = ; private int y = ; @Test public void additionTest() int z = x + y; assertEquals( z); 下面这个方法也同样能够工作 import junit Test; import junit framework TestCase; public class AdditionTest extends TestCase private int x = ; private int y = ; @Test public void addition() int z = x + y; assertEquals( z); 这允许您遵循最适合您的应用程序的命名约定 例如 我介绍的一些例子采用的约定是 测试类对其测试方法使用与被测试的类相同的名称 例如 ntains() 由 ntains() 测试 List add() 由 ListTest addAll() 测试 等等 TestCase 类仍然可以工作 但是您不再需要扩展它了 只要您用 @Test 来注释测试方法 就可以将测试方法放到任何类中 但是您需要导入 junit Assert 类以访问各种 assert 方法 如下所示 import junit Assert; public class AdditionTest private int x = ; private int y = ; @Test public void addition() int z = x + y; Assert assertEquals( z); 您也可以使用 JDK 中新特性(static import) 使得与以前版本一样简单 import static junit Assert assertEquals; public class AdditionTest private int x = ; private int y = ; @Test public void addition() int z = x + y; assertEquals( z); 这种方法使得测试受保护的方法非常容易 因为测试案例类现在可以扩展包含受保护方法的类了 SetUp 和 TearDown JUnit 测试运行程序(test runner)会在运行每个测试之前自动调用 setUp() 方法 该方法一般会初始化字段 打开日志记录 重置环境变量 等等 例如 下面是摘自 XOM 的 XSLTransformTest 中的 setUp() 方法 protected void setUp() System setErr(new PrintStream(new ByteArrayOutputStream())); inputDir = new File( data ); inputDir = new File(inputDir xslt ); inputDir = new File(inputDir input ); 在 JUnit 中 您仍然可以在每个测试方法运行之前初始化字段和配置环境 然而 完成这些操作的方法不再需要叫做 setUp() 只要用 @Before 注释来指示即可 如下所示 @Before protected void initialize() System setErr(new PrintStream(new ByteArrayOutputStream())); inputDir = new File( data ); inputDir = new File(inputDir xslt ); inputDir = new File(inputDir input ); 甚至可以用 @Before 来注释多个方法 这些方法都在每个测试之前运行 @Before protected void findTestDataDirectory() inputDir = new File( data ); inputDir = new File(inputDir xslt ); inputDir = new File(inputDir input ); @Before protected void redirectStderr() System setErr(new PrintStream(new ByteArrayOutputStream())); 清除方法与此类似 在 JUnit 中 您使用 tearDown() 方法 该方法类似于我在 XOM 中为消耗大量内存的测试所使用的方法 protected void tearDown() doc = null; System gc(); 对于 JUnit 我可以给它取一个更自然的名称 并用 @After 注释它 @After protected void disposeDocument() doc = null; System gc(); 与 @Before 一样 也可以用 @After 来注释多个清除方法 这些方法都在每个测试之后运行 最后 您不再需要在超类中显式调用初始化和清除方法 只要它们不被覆蓋即可 测试运行程序将根据需要自动为您调用这些方法 超类中的 @Before 方法在子类中的 @Before 方法之前被调用(这反映了构造函数调用的顺序) @After 方法以反方向运行 子类中的方法在超类中的方法之前被调用 否则 多个 @Before 或 @After 方法的相对顺序就得不到保证 套件范围的初始化 JUnit 也引入了一个 JUnit 中没有的新特性 类范围的 setUp() 和 tearDown() 方法 任何用 @BeforeClass 注释的方法都将在该类中的测试方法运行之前刚好运行一次 而任何用 @AfterClass 注释的方法都将在该类中的所有测试都运行之后刚好运行一次 例如 假设类中的每个测试都使用一个数据库连接 一个网络连接 一个非常大的数据结构 或者还有一些对于初始化和事情安排来说比较昂贵的其他资源 不要在每个测试之前都重新创建它 您可以创建它一次 并还原它一次 该方法将使得有些测试案例运行起来快得多 例如 当我测试调用第三方库的代码中的错误处理时 我通常喜欢在测试开始之前重定向 System err 以便输出不被预期的错误消息打乱 然后我在测试结束后还原它 如下所示 // This class tests a lot of error conditions which // Xalan annoyingly logs to System err This hides System err // before each test and rest cha138/Article/program/Java/ky/201311/28884相关参考
知识大全 Spring+Hibernate的单元测试JUnit
Spring+Hibernate的单元测试JUnit 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
使用JUnit对EJB进行单元测试[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
使用JUnit对EJB进行单元测试[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
使用JUnit对EJB进行单元测试[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 怎样使用Junit Framework进行单元测试的编写
怎样使用JunitFramework进行单元测试的编写 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧
测试分类白箱测试黑箱测试单元测试集成测试功能测试……白箱测试是指在知道被测试的软件如何(How)完成功能和完成什么样(What)的功能的条件下所作的测试一般是由开发人员完成单元测试是一种白箱测试因
Eclipse中建立自己的JUnit测试[4] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 现
关于Java单元测试中的伪对象介绍(图) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在单元测
JUnit测试建议 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 以下是对JUnit实践的一个很
Jython开发的JUnit测试包 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! JUnit测试