Nick Randell
Nick Randell

Reputation: 18315

Make Contract.Assert throw an exception rather than display a Dialog box

If I'm using the new Code Contracts Contract.Assert method, 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.

Upvotes: 6

Views: 1246

Answers (2)

HackSlash
HackSlash

Reputation: 5832

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.

Upvotes: 0

Nick Randell
Nick Randell

Reputation: 18315

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.

Upvotes: 6

Related Questions