日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

利用COM+对数据库操作进行单元测试

發布時間:2025/3/21 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用COM+对数据库操作进行单元测试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
當單元測試需要對數據庫執行CRUD(Create,Retrieve,Update,Delete)操作時,測試過后會在我們的數據庫中留下大量重復的垃圾數據,這些垃圾很礙眼不是嗎?而且我們的下一個測試有可能因為這些垃圾產生一些錯誤。

那么我們要如何處理這些垃圾數據和保證測試的穩定的呢?顯然,我們需要在每次測試之前和測試完成之后讓數據庫都保持相同的狀態。換句話說,就是我們需要"undo"這些在測試中對數據庫執行的CRUD操作。

對于我們需要的這種"undo"操作,你以前是怎么做的呢?手動的移除還是使用ADO.NET的事物處理呢?這些方法都可行,但對我們來說還不夠好。因為它們都需要我們編寫更多的代碼,影響我們的開發效率。

現在,就要開始說本文的重點了,利用COM+的自動事務處理功能來幫助我們實現我們的"undo"。

首先,寫一個基類,此類能夠在每一個方法完成后自動回滾對數據庫的操作:
using?System;
using?NUnit.Framework;
using?System.EnterpriseServices;

namespace?TransactionTest
{
????[TestFixture]
????[Transaction(TransactionOption.Required)]
????
public?class?DatabaseFixture:ServicedComponent
????
{
????????[TearDown]
????????
public?void?TransactionTearDown()
????????
{
????????????
if(ContextUtil.IsInTransaction)
????????????
{
????????????????ContextUtil.SetAbort();
????????????}

????????}

????}

}

下面再寫一個使用此基類的示例程序:
using?System;
using?NUnit.Framework;
using?System.Data;
using?System.Data.SqlClient;

namespace?TransactionTest
{
????
public?class?CategoryTests:DatabaseFixture
????
{
????????
string?CONN?=?@"Server=192.168.0.58\sun;Database=Northwind;uid=帳號;pwd=密碼";

????????[Test]
????????
public?void?InsertTest()
????????
{
????????????
string?categoryName?=?Insert("Test?category");
????????????VerifyRowExists(categoryName,?
true);
????????}


????????[Test]
????????
public?void?DeleteTest()
????????
{
????????????
string?categoryName?=?Insert("Test?category");
????????????Delete(categoryName);
????????????VerifyRowExists(categoryName,?
false);
????????}


????????
/**////?<summary>
????????
///?新增一條記錄
????????
///?</summary>
????????
///?<param?name="categoryName"></param>
????????
///?<returns></returns>

????????private?string?Insert(string?categoryName)
????????
{
????????????
using?(SqlConnection?conn?=?new?SqlConnection(CONN))
????????????
{
????????????????
string?strSQL?=?"Insert?Categories?(CategoryName)?values('"?+?categoryName?+?"')";
????????????????SqlCommand?cmd?
=?new?SqlCommand(strSQL,?conn);
????????????????conn.Open();
????????????????cmd.ExecuteNonQuery();
????????????}

????????????
return?categoryName;
????????}


????????
/**////?<summary>
????????
///?刪除一條記錄
????????
///?</summary>
????????
///?<param?name="categoryName"></param>
????????
///?<returns></returns>

????????private?string?Delete(string?categoryName)
????????
{
????????????
using?(SqlConnection?conn?=?new?SqlConnection(CONN))
????????????
{
????????????????
string?strSQL?=?"Delete?from?Categories?Where?CategoryName='"?+?categoryName?+?"'";
????????????????SqlCommand?cmd?
=?new?SqlCommand(strSQL,?conn);
????????????????conn.Open();
????????????????cmd.ExecuteNonQuery();
????????????}

????????????
return?categoryName;
????????}


????????
/**////?<summary>
????????
///?對執行的數據庫操作進行驗證
????????
///?</summary>
????????
///?<param?name="categoryName"></param>
????????
///?<param?name="shouldExist"></param>

????????private?void?VerifyRowExists(string?categoryName,bool?shouldExist)
????????
{
????????????SqlConnection?conn?
=?new?SqlConnection(CONN);
????????????conn.Open();

????????????
string?strSQL?=?"Select?*?from?Categories?where?CategoryName='"?+?categoryName?+?"'";
????????????SqlCommand?cmd?
=?new?SqlCommand(strSQL,?conn);
????????????SqlDataReader?dr?
=?cmd.ExecuteReader(CommandBehavior.CloseConnection);
????????????Assert.AreEqual(shouldExist,dr.HasRows);
????????????dr.Close();
????????}

????}

}


如果編譯上面的程序,還需要給程序加一個強名稱,否則是無法通過的

?

在命令行使用 sn -k test.snk
然后把 test.snk 拷貝到程序目錄中,再設置
[assembly: AssemblyKeyFile(@"..\..\..\test.snk")]





原文:http://weblogs.asp.net/rosherove/articles/dbunittesting.aspx

轉載于:https://www.cnblogs.com/netflu/archive/2005/07/29/202805.html

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的利用COM+对数据库操作进行单元测试的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。