簡體   English   中英

Linq2Sql-轉換代碼-Visual Studio 2012-單元測試

[英]Linq2Sql - Converting Code - Visual Studio 2012 - Unit Tests

我一直在嘗試轉換下面的代碼。 我已經嘗試過了,並將在下面的代碼下面發布嘗試。 我很困惑

我必須轉換的代碼:


[TestMethod]
        public void SRSTransactiondataCleanTest()
        {
            using (SqlConnection sqlConn = new
               SqlConnection(@"Data Source=localhost;Initial Catalog=CorporateDWTest;Integrated Security=SSPI;"))
            {

                StringBuilder str = new StringBuilder();
                str.Append(@"SELECT * FROM [dbo].[SRS_Ticket_Transaction_Stage_Cleaned]");
                sqlConn.Open();
                SqlDataAdapter da = new SqlDataAdapter(str.ToString(), sqlConn);
                DataTable dResults = new DataTable();
                DataTable dAudit = new DataTable();
                da.Fill(dResults);

                da.SelectCommand.CommandText = @"SELECT [Table_Name],[Package_Name],[Execution_Start_Time],[Execution_End_Time],[Processing_Successful], Audit_Key," +
                    @"[Table_Initial_Row_Count],[Table_Final_Row_Count] FROM [SRS_Dim_Audit] WHERE Package_Name LIKE 'SAPSRSDataToStageClean'";

                da.Fill(dAudit);
                var r = dAudit.Rows[0][2].ToString();

                Assert.AreEqual(1, dAudit.Rows.Count);
                Assert.AreEqual("SRS_Ticket_Transaction_Stage_Cleaned", dAudit.Rows[0][0].ToString());
                Assert.AreEqual("SAPSRSDataToStageClean", dAudit.Rows[0][1].ToString());
                Assert.AreEqual(bool.TrueString, dAudit.Rows[0][4].ToString());
                Assert.IsTrue(int.Parse(dAudit.Rows[0][7].ToString()) > 10);
                Assert.IsTrue(dResults.Rows.Count > 50);
                Assert.AreEqual(int.Parse(dAudit.Rows[0][7].ToString()), dResults.Rows.Count);
                Assert.AreEqual(int.Parse(dAudit.Rows[0][5].ToString()), int.Parse(dResults.Rows[0][2].ToString()))
                sqlConn.Close();
            }
       }

到目前為止,我有:

[TestMethod]
        public void SRSTransactiondataCleanTest()
        {
            using (var context = new CorporateDWTestEntities4())
            {
                var stageCleaned = context.SRS_Ticket_Transaction_Stage_Cleaned;
                var auditRecords = context.SRS_Dim_Audit.Where(s => s.Package_Name == "SAPSRSDataToStageClean");
                var auditRecord = auditRecords.FirstOrDefault();

                Assert.AreEqual(1, stageCleaned.Count());
                Assert.AreEqual(auditRecord.Table_Final_Row_Count, stageCleaned.Count());
                Assert.AreEqual(52, auditRecords.Count());
                Assert.AreEqual("SRS_Ticket_Transaction_Stage_Cleaned", auditRecord.Table_Name);
                Assert.AreEqual("SAPSRSDataToStageClean", auditRecord.Package_Name);
                Assert.AreEqual(true, auditRecord.Processing_Successful);
                Assert.IsTrue(auditRecord.Table_Final_Row_Count > 10);

            }
        }

在這個代碼轉換方面,我還很陌生。我走對了嗎? 運行此命令時,我收到一條消息,指出:

"Assert.AreEqual failed. Expected <1>. Actual <9461>."

當我將其更改為9461時,整個測試通過。 這是為什么? 我使用了錯誤的變量嗎? 我只想知道我編寫的代碼是否實際上在鏡像要轉換的代碼。 我知道用編程語法一定要一絲不苟。 我想知道是否有人可以對此進行審查並修改必要的IF。

PS。 該行:

  Assert.AreEqual(int.Parse(dAudit.Rows[0][5].ToString()), int.Parse(dResults.Rows[0][2].ToString()));

弄得我心煩意亂,什至問我呢?

您的第一個測試應該是

 Assert.AreEqual(1, auditRecords.Count());

而不是

Assert.AreEqual(1, stageCleaned.Count());

你也有考試

Assert.AreEqual(52, auditRecords.Count());

我看不到您可以免費獲得52。 如果這應該等於

Assert.IsTrue(dResults.Rows.Count > 50);

那應該是

Assert.IsTrue(stageCleaned.Count() > 50);

不知道為什么你會被這條線弄糊塗

 Assert.AreEqual(int.Parse(dAudit.Rows[0][5].ToString()), int.Parse(dResults.Rows[0][2].ToString()));

您必須非常接近,因為您已經計算出所有其他dAudit.Rows[0][...]值是什么,所以大概您知道int.Parse(dAudit.Rows[0][5].ToString())代表auditRecord.Audit_Key (假設將此定義為int)。 類似地, dResults.Rows[0][2]將是SRS_Ticket_Transaction_Stage_Cleaned表中第一行的第三列。

所以大概這代表了

var firstStageRecord = stageCleaned.First();
Assert.IsTrue(auditRecord.Audit_Key , firstStageRecord.xxx); 

其中xxx是第三列的名稱。

還有其他一些問題需要指出。 如果您多次調用stageCleaned.Count(),則每次調用它都會發出一個sql命令。

原始代碼是對sqlConnection進行硬編碼的,而新代碼是使用默認代碼或使用配置文件中的連接,因此您需要檢查以確保與正確的數據庫通信。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM