读书人

继续集成中的单元测试

发布时间: 2012-10-08 19:54:56 作者: rapoo

持续集成中的单元测试

?? 最近在研究持续集成。使用maven、nexus、hudson架设了一套餐持续集成环境。项目确实可以作到自动或者定时的编译。 使用checstyle、pdm、findbug对代码进行静态代码分析。个人认为可以把静态分析工具集成到eclipse里面,这样可以在编码初期就发现一些bug。也可以把这些工具当成maven的插件,在编译的时候也作一些检查。

?

?? 可是现在的项目里面没有单元测试,这套持续集成环境就成了一套自动定时编译环境,根本没有给项目带来什么好处。只有单元测试,这样才能把质量得到提高。

??

?? 定义规范,编写高质量的代码。参考《代码整洁之道》。此书对提高团队整体质量意识很有帮助。??

?

?? 质量,质量意识的灌输。

?

?? 大家有对持续集成中单元测试是怎么作,多多发表意见。

?

?? 单元测试:junit Jmock

?

??? 自己写的一个jmock demo

???

import static org.junit.Assert.assertEquals;import org.jmock.Expectations;import org.jmock.Mockery;import org.jmock.integration.junit4.JMock;import org.jmock.integration.junit4.JUnit4Mockery;import org.jmock.lib.legacy.ClassImposteriser;import org.junit.Test;import org.junit.runner.RunWith;import com.sinovatech.mock.user.Foo;@RunWith(JMock.class)public class FooTest {/** * 模拟接口时的写法为: *Mockery context = new JUnit4Mockery();  *//**模拟类时的写法为: * Mockery context = new JUnit4Mockery() {{     *   setImposteriser(ClassImposteriser.INSTANCE);     * }};    */Mockery context = new JUnit4Mockery() {{setImposteriser(ClassImposteriser.INSTANCE);//默认实现的是对接口,这里要对类mock,所以加上这句}};@Testpublic void testFoo() {final Foo foo = context.mock(Foo.class);context.checking(new Expectations() {{one(foo).hello();will(returnValue("foo"));}/*可以定义多个块*/{one(foo).hello();will(returnValue("hello"));}});assertEquals("foo", foo.hello());assertEquals("hello", foo.hello());context.assertIsSatisfied();//如果没有使用mock,测试不通过}}

?

?

1 楼 ngn9999 2010-10-08 大多数持续集成工具都不带测试用例,所以这些必须手写,不仅仅是单元测试,通过持续集成完成集成测试,甚至系统测试,都是可行的。我们之前用Topo来做,就是写了大量的集成测试用例,但没有写单元测试用例。

读书人网 >软件架构设计

热点推荐