某从未搞过单元测试,觉得好神秘!
但测试驱动,如雷贯耳,所谓未写代码,先写测试;博客园又有大神说,所谓的需求分析,应当具体化为测试用例。。。反正,单元测试就是好重要!
http://www.cnblogs.com/freeflying/p/4846618.html
http://www.cnblogs.com/freeflying/p/4810647.html
所以一直都想搞一搞。但网上的文章我看不大明白,这两天抓住难得的机会摸索了一下,好像有点眉目了。先记录一下,日后在此基础上再出发。
什么是单元测试?我感觉单元测试就是自动化测试。写一些相关的方法,来调用我们需要测试的方法,跑一遍。测试项目为此提供了便利。
比方说,我想对业务逻辑层的一些方法进行单元测试。首先在VS中右击该方法,选单元测试,建立单元测试项目。系统自动搭建了框架,完成了许多支撑代码。
不过,如何调用目标方法来进行测试,还需要我们自己完成。同时,令我诧异的是,调用目标方法所需要的一些动态库,也要我们自己手动添加!
单元测试的主要方法是Assert(断言)。比如,Assert.AreEqual(期望值,实际运行值)。如果两个值相符,则显示测试通过;否则红灯。
单元测试可以选定进行测试,也可以全部跑一遍。
还可以调试!方法是选VS菜单栏中的 测试 - 调试,方便得很。
有代码有机八:
namespace Services.User.Tests
{
[TestClass()]
public class UserHomeMadeServiceTests
{
readonly string connString = "。。。。。";
ISessionFactory sessionFactory;
ISession session;
IUserHomeMadeService service;
[TestInitialize()]//测试环境初始化
public void Init()
{
sessionFactory = Fluently.Configure()
.Database(FluentNHibernate.Cfg.Db.OracleClientConfiguration.Oracle10.
ConnectionString(connString).ShowSql())
.ExposeConfiguration(f => f.SetInterceptor(new SqlStatementInterceptor()))
.Mappings(m => m.FluentMappings.AddFromAssembly(Assembly.Load("这是一个数据库持久层代码文件名称")))
.BuildSessionFactory();
session = sessionFactory.OpenSession();
service = new UserHomeMadeService(new UserHomeMadeRepository(session));
}
[TestCleanup()]//测试完毕大扫除
public void Cleanup()
{
session.Disconnect();
session.Dispose();
}
[TestMethod()]//测试方法
public void SetModelTest()
{
ITransaction transaction = session.BeginTransaction(IsolationLevel.ReadCommitted);
UserHomeMade hm = new UserHomeMade();
hm.USER_ID = 1;
hm.HOME_MADE = System.Text.Encoding.GetEncoding("GB2312").GetBytes("大便干小便黄");
hm.CREATE_DATE = DateTime.Now;
hm.EDIT_DATE = DateTime.Now;
Assert.AreEqual(true, service.SetModel(hm));
transaction.Rollback();
}
[TestMethod()]
public void GetModelTest()
{
UserHomeMade hm = service.GetModel(1);
string homemade = System.Text.Encoding.GetEncoding("GB2312").GetString(hm.HOME_MADE);
Assert.AreEqual("大便干小便黄", homemade);
}
}
}