Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I test for calls ignoring params arguments in NSubstitute?

I have code which looks like:

eventPublisher.Publish(new SpecificEvent(stuff),
                        EventStreams.Stream1,
                        EventStreams.Stream2);

which is calling a method defined as :

Publish<T>(T eventToPublish, params EventStream[] streams) where T : IEvent;

in something I want to test. This event publication is the most important thing to happen in what I want to test, but I am not interested in testing which event streams it publishes to. How can I make a substitute in NSubstitute to test that this is called with an appropriate event, without concerning myself with the params? Thus far, I have:

eventPublisher.Received(1).Publish(Arg.Any<SpecificEvent>());

This, of course, does not match the call with two streams. Is there a way to match a params argument using NSubstitute, ignoring the number of parameters passed in?

like image 342
penguat Avatar asked Dec 24 '22 08:12

penguat


1 Answers

Params enables methods to receive variable numbers of parameters. With params, the arguments passed to a method are changed by the compiler to elements in a temporary array. This array is then used in the receiving method.

You can use Arg.Any<EventStream[]> to match a params argument, ignoring number of parameters passed in.

eventPublisher.Received(1).Publish(Arg.Any<SpecificEvent>(), Arg.Any<EventStream[]>())
like image 69
Valentin Avatar answered Dec 31 '22 14:12

Valentin