This is a migrated thread and some comments may be shown as answers.

Multiple calls to Mocked NonPublic method failing

1 Answer 76 Views
General Discussions
This is a migrated thread and some comments may be shown as answers.
Petter
Top achievements
Rank 1
Petter asked on 31 Oct 2017, 10:09 AM

So I have a method that I'm trying to test that looks something like the following:

        public void MethodToTest(List<Object> importEntities, short id)
        {
            var relevantObjects = importEntities.Select(some code).Distinct();

            var list1= new Dictionary<string, NewTenantRange>();

            var list2= new Dictionary<string, NewTenantRange>();

            var list3= new Dictionary<string, NewTenantRange>();

            foreach (var obj in relevantObjects)
            {
                if (!list1.ContainsKey(obj.key))
                {
                    var item1 = NewTenantRange.GetBwTenantRange(obj);
                    list1.Add(item1.Number, item1);
                }

                if (!list2.ContainsKey(obj.key))
                {
                    var item2 = NewTenantRange.GetBbTenantRange(obj);
                    list2.Add(item2.Number, item2);
                }

                if (!list3.ContainsKey(obj.key))
                {
                    var item3 = NewTenantRange.GetVsTenantRange(obj);
                    list3.Add(item3.Number, item3);
                }
            }

            InsertRange(list1.Values, tenantId, Ranges.Range1);
            InsertRange(list2.Values, tenantId, Ranges.Range2);
            InsertRange(list3.Values, tenantId, Ranges.Range3);
        }

And my test so far:

[TestMethod]
        public void TestMethodToTest()
        {
            //Arrange
            var service = Mock.Create<myService>(Constructor.Mocked, Behavior.CallOriginal);

            var entities = FakeLf10Orders().ToList(); //returns list of fake objects

            Mock.NonPublic.Arrange(service, "InsertRange",
                    ArgExpr.IsAny<IEnumerable<TenantRangeService.NewTenantRange>>(), Arg.AnyShort, Arg.IsAny<Ranges>())
                .DoNothing().Occurs(3);

            //Act 
            service.MethodToTest(entities, Arg.AnyShort);

            //Assert
            Mock.AssertAll(service);
        }

Now, everuthing is working fine until the method InsertRange is called for the second time. Then instead of DoNothing(), the code is executed and therefore fails. Anyone with any ideas?

 

Thank you!

//Petter

1 Answer, 1 is accepted

Sort by
0
Petter
Top achievements
Rank 1
answered on 06 Nov 2017, 12:08 PM

Never mind, figured it out.

It was the last parameter in the Assert that was incorrect:

Arg.IsAny<Ranges>()  should be ArgExpr.IsAny<Ranges>().

 

 

 

 

Tags
General Discussions
Asked by
Petter
Top achievements
Rank 1
Answers by
Petter
Top achievements
Rank 1
Share this question
or