Agile Java 书中的例子用JUnit 3 写成, 学习过程中顺便应用一下JUnit 4。
Lesson 2 - Suites 一节
import junit.framework.TestSuite; public class AllTests { public static TestSuite suite() { junit.framework.TestSuite suite = new junit.framework.TestSuite(); suite.addTestSuite(StudentTest.class); suite.addTestSuite(CourseSessionTest.class); return suite; } }
由于JUnit4 添加了Annotation支持 简化了TestSuite的写法 。 只需如此:
import org.junit.runner.RunWith; import org.junit.runners.Suite; @RunWith(Suite.class) @Suite.SuiteClasses({StudentTest.class, CourseSessionTest.class}) public class AllTests { }
The setUp Method 一节
TestCase中测试方法公用的初始化代码放在setUp()中
public class CourseSessionTest extends TestCase { private CourseSession session; @Override public void setUp() { session = new CourseSession("ENGL", "101"); } //... }
对JUnit4 初始化方法的名字可以任选,只要使用@Before指明”这是执行test之前需要运行的代码“即可
public class CourseSessionTest { private CourseSession session; @Before public void anyMethod() { session = new CourseSession("ENGL", "101"); } //... }
Caution!session本来是在测试方法内初始化的,抽出来以后记得把那些方法里的CourseSession session改掉…
More Refactoring 一节
测试代码中引入的List 就是对实现代码的一种设计, 最终还要引入到生产代码中去。
保持良好的封装,与客户代码减少耦合——测试代码中并不需要得到allStudents的List,只是需要list中的各个元素。此时,应该把List的实现代码移入CourseSession类中,只暴露get方法,防止客户代码对这个List进行修改。