Osk*_*lin 9 c# linq sql-server asp.net unit-testing
我用谷歌搜索了一下,并没有找到我需要的答案.
我正在使用SQL Server和LINQ为客户开发C#的网页.我希望用户能够相互发送消息.所以我所做的是我用实际进入数据库的数据对其进行单元测试.
问题是我现在依赖至少有2个用户,我知道他的ID.此外,我必须自我清理.这导致了相当大的单元测试,在一次测试中进行了很多测试.
让我们说我想更新一个用户.这意味着我必须终止用户,更新它,然后删除它.这在一个单元测试中有很多断言,如果失败并且有更新,我必须手动删除它.
如果我以任何其他方式执行此操作,而不将数据保存到DB,我肯定无法知道更新后数据是否存在于数据库中等.
如果没有在一次测试中测试大量功能的测试,那么正确的方法是什么?
Cha*_*ana 17
在System.Transactions.TransactionScope块中进行所有测试,并且不要调用Scope.Complete()...当您退出时,所有更改都将回滚,而其他用户将无法看到您的临时数据在数据库中创建,因此测试过程只会影响测试机器.
您可以在TransactionScope的块内输入新用户,读取数据库以验证输入是否正确,以及您需要检查的其他内容...
让单个单元测试方法冒充两个不同的用户,所有这些都在一个事务中......
例如代码
   using (var scop = new System.Transactions.TransactionScope())
   {
       // all your test code and Asserts that access the database, 
       // writes and reads, from any class, ...
       // to commit at the very end of this block,
       // you would call
       // scop.Complete();  // ..... but don't and all will be rolled back
   }