C# Assert.AreEqual On Fail引发异常

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

我是单元测试新手,使用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.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);