Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Howto break on UnitTesting.Assert.AreEqual?

Standard behavior of assertion in a VS UnitTest project is to just tell me that a test has failed on a specific line.

Sometimes however it would be convenient, if I could break when such an assertion fails. Because just setting a breakpoint on that line breaks also for not failing testcases. If I could break on assertion failing, I could see immediately which testcase is failing.

How can I temporarily tell VS to break, when assertion fails?

E.g. I have many loops in the following way in my unit tests and want to know which iteration is failing:

foreach(var testcase in testcases)
{
    Assert.AreEqual(testcase.ExpectedOutputData, FuncionUnderTest(testcase.InputData));
}
like image 366
MTR Avatar asked Dec 16 '22 15:12

MTR


2 Answers

Just use a conditional breakpoint, and give it the logical negative of the assertion's check.

Personally, I think breakpoints are seriously underused as nothing more than a 'break at this point' tool- They're very versatile, and can easily be used instead of Console.WriteLine for showing debug output without actually modifying the code, as well as only breaking if an assertion would fail.

They do tend to cause a bit of a performance hit if overused this way though, but that's rarely a problem running unit tests.

like image 142
Flynn1179 Avatar answered Dec 28 '22 13:12

Flynn1179


Without having too much knowledge of how you're constructing your unit tests, it seems to me that if you are struggling to see which assertion is causing your unit test to fail, then perhaps you are testing too much in your individual tests? Unit tests should be as atomic as possible to negate against precisely this issue. If you can break your tests up, even down to having a single assertion within a single test, it will be much easier to work out which test is failing. I would certainly advocate that over writing breakpoint-specific code into your unit tests.

like image 21
levelnis Avatar answered Dec 28 '22 13:12

levelnis