【发布时间】:2013-12-03 14:41:02
【问题描述】:
我一直在尝试转换下面的代码。我已经尝试过了,我将在下面的代码下方发布尝试。说到这里我很困惑
我必须转换的代码:
[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 时,整个测试通过。这是为什么?我使用了错误的变量吗?我只想知道我编写的代码是否实际上反映了我要转换的代码。我知道用编程语法一定要一丝不苟。我想知道是否有人可以对此进行审查并在必要时进行修改。
附言。行:
Assert.AreEqual(int.Parse(dAudit.Rows[0][5].ToString()), int.Parse(dResults.Rows[0][2].ToString()));
把我搞糊涂了,这到底是在问我什么?
【问题讨论】:
-
请注意,这些不是单元测试,它们是集成测试。
-
@KirkWoll 这是一个重要的区别,特别是对于刚接触单元测试的人。我曾与许多客户合作过,他们没有充分理解这种区别,并且对单元测试的实践感到失望,因为他们有大量脆弱的、紧密耦合的集成测试,他们疯狂地试图维护这些测试。
-
Daniel,这甚至与手头的讨论无关。
-
我同意 Dan 的观点 - 对于刚接触单元测试的人来说,理解集成和单元测试之间的区别有很好的理由,因为理解范围和编写好的单元测试的实践将对设计有显着影响。
-
这就是为什么我将其发布为评论,而不是作为答案。当有人询问具有漏洞的 SQL 相关问题时,人们发布有关 SQL 注入漏洞的 cmets 的方式相同。这些 cmets 与问题无关,但它仍然是有用的信息。
标签: c# visual-studio-2012 linq-to-sql entity-framework-5 integration-testing