日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

junit junit_JUnit理论简介

發(fā)布時(shí)間:2023/12/3 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 junit junit_JUnit理论简介 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

junit junit

您讀過數(shù)學(xué)理論嗎?

它通常讀取如下內(nèi)容:

對(duì)于所有a,b> 0滿足以下條件:a + b> a和a + b> b

通常,這些語句更難以理解。

這種陳述有一些有趣的地方:它適用于相當(dāng)大(在這種情況下為無限)集合的每個(gè)元素(或元素組合)。

將其與典型測(cè)試的陳述進(jìn)行比較:

@Testpublic void a_plus_b_is_greater_than_a_and_greater_than_b(){int a = 2;int b = 3;assertTrue(a + b > a);assertTrue(a + b > b);}

這僅是關(guān)于我們所討論的大集合中單個(gè)元素的陳述。 不太令人印象深刻。 當(dāng)然,我們可以通過遍歷測(cè)試(或使用參數(shù)化測(cè)試 )來解決此問題:

@Testpublic void a_plus_b_is_greater_than_a_and_greater_than_b_multiple_values() {List<Integer> values = Arrays.asList(1, 2, 300, 400000);for (Integer a : values)for (Integer b : values) {assertTrue(a + b > a);assertTrue(a + b > b);}}

當(dāng)然,這仍然僅測(cè)試了一些值,但是也變得非常難看。 我們正在使用9行代碼來測(cè)試數(shù)學(xué)家在一行中寫的內(nèi)容! 這種關(guān)系對(duì)于任何值a,b都應(yīng)保持的要點(diǎn)在翻譯中完全消失了。

但是仍然有希望: JUnit理論 。 讓我們看看使用該漂亮工具的測(cè)試情況:

import org.junit.experimental.theories.DataPoints; import org.junit.experimental.theories.Theories; import org.junit.experimental.theories.Theory; import org.junit.runner.RunWith;import static org.junit.Assert.assertTrue;@RunWith(Theories.class) public class AdditionWithTheoriesTest {@DataPointspublic static int[] positiveIntegers() {return new int[]{1, 10, 1234567};}@Theorypublic void a_plus_b_is_greater_than_a_and_greater_than_b(Integer a, Integer b) {assertTrue(a + b > a);assertTrue(a + b > b);} }

使用JUnit理論,測(cè)試分為兩個(gè)獨(dú)立部分:提供數(shù)據(jù)點(diǎn)(即用于測(cè)試的值)的方法以及理論本身。 該理論看起來幾乎像是一個(gè)測(cè)試,但是它具有不同的注釋(@Theory)并且需要參數(shù)。 類中的理論將與數(shù)據(jù)點(diǎn)的每種可能組合一起執(zhí)行。

這意味著,如果我們對(duì)測(cè)試主題有一個(gè)以上的理論,則只需聲明數(shù)據(jù)點(diǎn)一次。 因此,讓我們添加以下理論,這對(duì)于加法而言應(yīng)該是正確的:a + b = b + a因此,我們將以下理論添加到我們的類@Theory中public void add_is_commutative(Integer a,Integer b){assertTrue(a + b == b + a); }

這就像一種魅力,并且可以開始看到它實(shí)際上也節(jié)省了一些代碼,因?yàn)槲覀儾恢貜?fù)數(shù)據(jù)點(diǎn)。 但是,我們僅使用正整數(shù)進(jìn)行測(cè)試,而可交換屬性應(yīng)適用于所有整數(shù)! 當(dāng)然,我們的第一個(gè)理論仍然只適用于正數(shù)

也有一個(gè)解決方案: 假設(shè) 。 假設(shè)您可以檢查理論的先決條件。 如果對(duì)于給定的參數(shù)集不正確,則該理論將被跳過。 所以我們的測(cè)試現(xiàn)在看起來像這樣:

@RunWith(Theories.class)public class AdditionWithTheoriesTest {@DataPointspublic static int[] integers() {return new int[]{-1, -10, -1234567,1, 10, 1234567};}@Theorypublic void a_plus_b_is_greater_than_a_and_greater_than_b(Integer a, Integer b) {Assume.assumeTrue(a >0 && b > 0 );assertTrue(a + b > a);assertTrue(a + b > b);}@Theorypublic void addition_is_commutative(Integer a, Integer b) {assertTrue(a + b == b + a);} }

這使測(cè)試表現(xiàn)力很好。

將測(cè)試數(shù)據(jù)與測(cè)試/理論實(shí)現(xiàn)分開,除了簡(jiǎn)潔以外,還可以帶來另一個(gè)積極的效果:您可能會(huì)開始考慮與實(shí)際測(cè)試內(nèi)容無關(guān)的測(cè)試數(shù)據(jù)。

讓我們做到這一點(diǎn)。 如果要測(cè)試采用整數(shù)參數(shù)的方法,那么哪些整數(shù)可能會(huì)引起問題? 這是我的建議:

@DataPointspublic static int[] integers() {return new int[]{0, -1, -10, -1234567,1, 10, 1234567, Integer.MAX_VALUE, Integer.MIN_VALUE};}

在我們的示例中,哪個(gè)當(dāng)然會(huì)導(dǎo)致測(cè)試失敗。 如果在Integer.MAX_VALUE中添加一個(gè)正整數(shù),則會(huì)溢出! 因此,我們剛剛得知我們目前的理論是錯(cuò)誤的! 是的,我知道這很明顯,但是請(qǐng)看一下當(dāng)前項(xiàng)目中的測(cè)試。 使用整數(shù)的所有測(cè)試是否都以MIN_VALUE,MAX_VALUE,0,正值和負(fù)值測(cè)試? 是的,是這樣。

那更復(fù)雜的對(duì)象呢? 琴弦? 日期? 收藏? 還是領(lǐng)域?qū)ο?#xff1f; 使用JUnit Theories,您可以設(shè)置測(cè)試數(shù)據(jù)生成器一次,以創(chuàng)建所有容易產(chǎn)生問題的場(chǎng)景,然后使用這些理論在所有測(cè)試中重用這些場(chǎng)景。 這將使您的測(cè)試更具表現(xiàn)力,并提高發(fā)現(xiàn)錯(cuò)誤的可能性。

參考:來自Java出現(xiàn)日歷博客的JCG合作伙伴 Jens Schauder 對(duì)JUnit理論的介紹 。

翻譯自: https://www.javacodegeeks.com/2013/12/introduction-to-junit-theories.html

junit junit

總結(jié)

以上是生活随笔為你收集整理的junit junit_JUnit理论简介的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。