C# Assert.AreEqual On Fail引发异常
我是单元测试新手,使用Nunit我不知道如何传递这个异常,但是有一个断言未处理的异常 我在做什么C# Assert.AreEqual On Fail引发异常,c#,nunit,C#,Nunit,我是单元测试新手,使用Nunit我不知道如何传递这个异常,但是有一个断言未处理的异常 我在做什么 Assert.AreEqual(exists, 1 == (int)ExecScalar(string.Format("SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = '{0}{1}' AND TABLE_SCHEMA ='{2}'", (audit ? DBHelper.Audit
Assert.AreEqual(exists, 1 == (int)ExecScalar(string.Format("SELECT COUNT(*)
FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = '{0}{1}' AND TABLE_SCHEMA ='{2}'",
(audit ? DBHelper.AuditTablePrefix : ""), tableName, schema)));
这里exists=true,在我的例子中,另一个值为1==0,所以它表示预期为true,但为false
所以我该怎么做,因为我不知道我该怎么做才能走得更远
提前感谢。如果需要抛出异常(预期情况),您可以使用以下代码:
Assert.Throws<ArgumentException>(delegate { throw new ArgumentException() } );
在[Test]声明附近。看起来您试图确保特定查询在表计数时返回
1
,
我建议您将这样复杂的查询包装在Assert.DoesNotThrow()
中,并使用Assert.AreEqual()
比较两个值:
int numberOfTables = -1;
Assert.DoesNotThrow(() => numberOfTablesRaw =
(int)ExecScalar(string.Format(
"SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = '{0}{1}' AND TABLE_SCHEMA ='{2}'",
(audit ? DBHelper.AuditTablePrefix : ""),
tableName,
schema)));
Assert.AreEqual(1, numberOfTables);
你想测试什么?测试的有效退出条件是什么?养成到处使用参数化查询的习惯。防止SQL注入攻击!我会使用
Assert.Throws(()=>classUnderTest.SomeMethod())代码>我不怀念旧的委托语法。
int numberOfTables = -1;
Assert.DoesNotThrow(() => numberOfTablesRaw =
(int)ExecScalar(string.Format(
"SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = '{0}{1}' AND TABLE_SCHEMA ='{2}'",
(audit ? DBHelper.AuditTablePrefix : ""),
tableName,
schema)));
Assert.AreEqual(1, numberOfTables);