MyException - 我的异常网
当前位置:我的异常网» C# » 怎么对数据库操作类进行单元测试

怎么对数据库操作类进行单元测试

www.MyException.Cn  网友分享于:2014-11-07  浏览:0次
如何对数据库操作类进行单元测试
假设我有一个DBTest数据库操作类
里面有Add(DBTestModel), Update(DBTestModel) DeleteById(int) GetAll() 四个方法 如何为这四个方法写单元测试
Add到好处理可以直接

[TestMethod()]
public void AddTest(){
DBTest db = new DBTest();
int row = db.Add(new DBTestModel);
Assert.AreEqule(row,1);
}

[TestMethod()]
public void DeleteByIdTest(){
int id = ????//id是数据库里面已有的id啊 而且这个ID也不是自己插入的时候能控制的 自增的啊
        //当然这个id可以在插入数据库的时候返回 可是程序里面的Add方法不需要返回的ID啊 只需要知道插入成功就可以了
        //需要用ID的时候 都是点击到一个界面上会列出所有 然后操作
DBTest db = new DBTest();
int row = db.DeleteById(id);
Assert.AreEqule(row,1);
}
//Update也需要ID  
//还有GetAll是返回数据库所有List<DBTestModel> 我如何知道数据库是否返回所有
//验证返回的List的count是否和数据库条数相等?如果是这样 我也得提前知道数据库条数啊

第一次写测试代码 不知道要怎么处理这些问题、、求教!
------解决思路----------------------
单元测试时可以指定先定条件的,你找下相关的文档就知道了

其实单元测试没规定你必须一个方法对应一个方法,我就做过一个单元测试方法里面把增删改查全部走一次
------解决思路----------------------
另外如果对数据库做单元测试,最好弄一个专门的单元测试数据库
------解决思路----------------------
接楼上,或者你的测试数据比较好区分。测的时候,增、改、查、删。
单元测试代码中有个地方可以初始化数据和清理数据的:
#region 附加测试属性
        // 
        //编写测试时,还可使用以下属性:
        //
        //使用 ClassInitialize 在运行类中的第一个测试前先运行代码
        //[ClassInitialize()]
        //public static void MyClassInitialize(TestContext testContext)
        //{
        //}
        //
        //使用 ClassCleanup 在运行完类中的所有测试后再运行代码
        //[ClassCleanup()]
        //public static void MyClassCleanup()
        //{
        //}
        //
        //使用 TestInitialize 在运行每个测试前先运行代码
        //[TestInitialize()]
        //public void MyTestInitialize()
        //{
        //}
        //
        //使用 TestCleanup 在运行完每个测试后运行代码
        //[TestCleanup()]
        //public void MyTestCleanup()
        //{
        //}
        //
        #endregion

------解决思路----------------------
首先数据库是需要一些初始数据的~
另外每个方法操作后 都要还原数据
[TestMethod]
        public void S_Service_DeleteUser()//测试删除,那么我可以测试添加 再测试删除
        {
            using (TransactionScope scope = new TransactionScope())//为了不产生数据,这个事务不会提交
            {
                _IService.AddUser(user);//这个user我在外面构造好了
                var entity = _IService.GetUserById(user.ID);

                Assert.IsNotNull(entity);

                _IService.DeleteUser(user);
                entity = _IService.GetUserById(user.ID);

                Assert.IsNull(entity);
            }
        }

文章评论

程序员都该阅读的书
程序员都该阅读的书
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
那些争议最大的编程观点
那些争议最大的编程观点
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
程序员的鄙视链
程序员的鄙视链
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
如何成为一名黑客
如何成为一名黑客
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
我是如何打败拖延症的
我是如何打败拖延症的
总结2014中国互联网十大段子
总结2014中国互联网十大段子
 程序员的样子
程序员的样子
老程序员的下场
老程序员的下场
中美印日四国程序员比较
中美印日四国程序员比较
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
鲜为人知的编程真相
鲜为人知的编程真相
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
我的丈夫是个程序员
我的丈夫是个程序员
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
Java程序员必看电影
Java程序员必看电影
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
一个程序员的时间管理
一个程序员的时间管理
10个调试和排错的小建议
10个调试和排错的小建议
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
旅行,写作,编程
旅行,写作,编程
编程语言是女人
编程语言是女人
每天工作4小时的程序员
每天工作4小时的程序员
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
程序员和编码员之间的区别
程序员和编码员之间的区别
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
代码女神横空出世
代码女神横空出世
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有