[英]Visual Studio 2012 - Linq2SQL - How to add List as attribute?
[英]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.