Unit Testing Parallel.Foreach C#
Asked Answered
G

1

9

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?

Gem answered 26/8, 2016 at 10:2 Comment(5)
Wouldn't it make more sense, to ask that question to Telerik Helpdesk?Michaella
what other test did you do?Exfoliate
try removing Parallel and just do a normal foreach.Stesha
Technically, you should lock variables defined outside of the Parallel loop if you intend on modify it from within the Parallel loop. This ensures thread syncing. You may be able see this if you change 5 to be the results of some random number generator.Nikkinikkie
Only in the first thread the arranged functions are getting mocked.Gem
G
4

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.

Gulosity answered 5/9, 2016 at 7:14 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.