Search code examples
c#unit-testingjustmock

Unit Testing Parallel.Foreach C#


I have been using JustMock for unit testing in C#. The problem I am facing is I cannot assert the functions called inside Parallel.Foreach. However the assignments done inside can be asserted.

Parallel.ForEach(aList, entity =>
{
    //Can be asserted using  Assert(5,parameter.value) in the test
    parameter.value = 5;

    //Cannot be asserted, assertion fails Mock.Assert(parameter) in the test
    //is arranged using MustBeCalled
    parameter.call();   
})

I found the same issue in other test cases also. Is this some wrong behavior of JustMock?


Solution

  • When doing parallel processing you cannot easily assume that something will or will not happen, that's what makes it harder. Instead, you concentrate on signs that will tell you that something is working. The issue here is that Parallel.ForEach stops processing as soon as exception is spotted, while you were expecting it to process all items. Nothing is wrong with your JustMock. Using normal foreach should resolve this issue. if you have reason to use Parallel.Foreach anyway, try to catch all Exception fires here.