Java代碼
2. @TestedBy( testClass = "it.javalinux.testedby.APITest", testMethod = "shouldAddTwoAndThree" )
3. public int add(int a, int b);
4. }
5.
6. public class APIImplOne {
7. public int add(int a, int b) {
8. return a + b;
9. }
10.
11. public class APIImplTwo {
12. public int add(int a, int b) {
13. return a - b;
14. }
15.
16. public class APITest {
17.
18. private APIInterface instance;
19.
20. @BeforeTestedBy
21. public beforeTestedBy(APIInterface instance) {
22. this.instance = instance;
23. }
24.
25. public void shouldAddTwoAndThree() {
26. assertThat(instance.add(3,2), is(5));
27. }
28.
29. }
當然,我使例子盡量簡單,但是TestedBy有更多的注釋,比如當沒有參數的構造函數的簡單反射調用時,被測試類的實例工廠能被指定,這些注釋還遠遠不夠。
2、在當前工作的類上運行測試
你寫一個測試類來檢驗代碼的正確性。很多時候,你寫單元測試來保證代碼的改變不會影響正在工作的代碼,或者其他同事正在用的代碼。你如何做呢?你可能改變你的代碼,然后跑所有的涉及到修改的類的測試類。然后,最后你跑所有的測試來保證你沒有影響到其他代碼。
那么讓你的IDE第一步做什么呢?它編譯你修改的類,并同時運行對應的測試類?既然你或者你的IDE能夠運行測試類,testedBy讓這個成為可能。一個eclipse插件就能做這些工作,針對你修改的類來運行相應的測試類,以驗證沒有破壞你的測試集,不僅僅是在編譯階段,也能在你寫代碼的時候。而且這個也不會太費時,因為插件能夠根據TestedBy的注釋來只運行很少的測試類,即那些已經修改過的類/方法對應的測試類。
而且,運行測試類,能夠得到一些清楚的報告比如:
Java代碼
1. "ClassUnderTest.methodUnderTest shouldThrowExceptionWithNullParameter doen't pass"
或者更好的:
Java代碼
1. "Failure: methodUnderTest in ClassUnderTest doesn't throw exception with null parameter, but it should!"
當然,你能夠拒絕這種針對類/方法名稱 (如果你想的話)提供的便利,自己從整個工程中去找那些測試類,根據需要自己來測試。
當然針對所有的類來運行所有的測試類也是可能的,你的測試也能夠在Junit上運行,因為TestedBy是基于Junit測試的。
一些特點
讓我列舉在我心中TestedBy的特點吧:
1、第一個可能是最沒有價值的,但是也是最有用的:在你的IDE中,你能夠導航你的源代碼到對應的測試代碼。這個特性將在eclipse4.4的時候發布,它能夠根據類名稱導航,即使類名處在一個字符串中。當然,這只是一個開始,一個專門的eclipse插件將被開發用來導航代碼,以及被測試代碼的測試代碼樹形結構,針對打開/修改的類(見第3點)執行測試代碼,等等。我不是一個eclipse開發的大師,因此非常歡迎哪位能夠在這方面做出貢獻。
2、你將在你的java文檔中找到這些注釋,考慮這是一個多好的事情,如果你使用BDD方式開發,定義測試方法形如 shouldNotAcceptNull()或者shouldThrowsExceptionIfEmpty等等。使用BDD方法,事實上你能夠定義和檢查約束,通過使用TestedBy的注釋,在JavaDoc文檔中把這些展示給你的API用戶。
3、你能夠從被測試類開始運行測試,而不是測試類。我在之前就說過這些了。
4、通過接口和約束的設計。我已經在上文中專門介紹了這些。
5、測試類自動生成。一個工具(ant,maven,或者eclipse工具)能用我們的TestedBy注釋來生成測試類。見6點。
6、Ant /maven 任務/插件來從被測試類運行測試,這個工具將管理并平穩的使用(用來保證測試類和注釋間的同步將很重要):
A. 反轉引擎:從存在的測試類開始,添加TestedBy注釋到被測試類中。
B. 從TestedBy注釋中開始運行測試類,來驗證他們能運行所有的測試,并且沒有注釋指向不存在的測試。
C. 從注釋開始生成(空的)測試類和方法。
當然,這還不夠,但是,我想這能給你一個想法。我現在正在做這些想法背后的事情,但是我需要在把他們呈現給社區之前把它們設計得更好。
Conclusions總結
你對這個方法有興趣嗎?讓我知道你的想法,并且跟你的朋友分享這個帖子…我能從這個帖子得到越多的反饋,我就能更好的做好它。
現在問題是..目前這個項目的狀態是什么?
你可以看一下project homepage on javalinuxlabs. googlecode 上面,你可以在svn下面找到一些類。這不是這個工程的第一次實現…它差不多是這個想法的證明。但是,我們需要更努力的工作來讓它更快的派上用場。
文章來源于領測軟件測試網 http://www.kjueaiud.com/