Make Contract.Assert throw an exception rather than display a Dialog box
If I'm using the new Code Contracts Contract.Assert
m开发者_运维问答ethod, is it possible to make it throw an exception rather than display a dialog box? I want to do this when running unit tests on the build machine.
Thanks to this post on MSDN forums I've found a possible solution.
namespace QuickGraph.Tests
{
[TestClass]
public class AssemblyContextTest
{
[AssemblyInitialize]
public static void Initialize(TestContext ctx)
{
// avoid contract violation kill the process
Contract.ContractFailed += new EventHandler<ContractFailedEventArgs>(Contract_ContractFailed);
}
static void Contract_ContractFailed(object sender, System.Diagnostics.Contracts.ContractFailedEventArgs e)
{
e.SetHandled();
Assert.Fail("{0}: {1} {2}", e.FailureKind, e.Message, e.Condition);
}
}
}
This appears to work.
According to the documentation:
If your code must throw a particular exception on failure of a precondition, you can use the generic overload of Requires as follows.
Contract.Requires<ArgumentNullException>(x != null, "x");
This is much more simple than the old accepted solution to this problem.
精彩评论