欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

持续集成中的单元测试

程序员文章站 2022-05-07 10:30:41
...

   最近在研究持续集成。使用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,所以加上这句
		}
	};
	
	@Test
	public 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,测试不通过
	}
	
	
	
}