Из вашего примера кода вы не настроили x => x.Add на Moq
session.Setup(x => x.Add(It.IsAny<IEnumerable>());
Если не указано, что установка для x.All должна быть x.Add? Если это так, вам нужно точно подобрать параметры Verify and Setup - хороший способ сделать это - извлечь его из общего метода, который возвращает выражение.
РЕДАКТИРОВАТЬ: добавил образец, я изменил подпись Add, так как я не вижу, как вы могли бы передать коллекцию в противном случае.
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
Mock<Boo> moqBoo = new Mock<Boo>();
moqBoo.Setup(IEnumerableHasExpectedNumberOfElements(10));
// ACT
moqBoo.Verify(IEnumerableHasExpectedNumberOfElements(10));
}
private static Expression<Action<Boo>> IEnumerableHasExpectedNumberOfElements(int expectedNumberOfElements)
{
return b => b.Add(It.Is<IEnumerable<Invoice>>(ie => ie.Count() == expectedNumberOfElements));
}
}
public class Boo
{
public void Add<T>(IEnumerable<T> item) where T : class, new()
{
}
}
public class Invoice
{
}
Кроме того, хороший способ отладки этих вещей состоит в том, чтобы настроить Mock с помощью MockBehavior.Strict, и после этого вызываемый код будет информировать вас о том, что вам нужно настроить.