J'ai isolé le comportement dans le cas de test suivant. Je serais reconnaissant à tous ceux qui peuvent me dire comment s'attendre à/vérifier un ensemble de propriétés pour une propriété List<T>
- il semble qu'il se passe quelque chose à l'intérieur It.Is<T>(predicate)
qui ne me semble pas très sensé en ce moment. Exemple de code sera exécuté comme une application de console de VS2008 - vous aurez besoin d'ajouter une référence à Moq 2.6 (je suis sur 2.6.1014.1) - s'il vous plaît essayez de décommenter les différentes déclarations ExpectSet pour voir ce qui se passe ...Les tests Moq utilisant ExpectSet() avec It.Is <T>() ne se comportent pas comme ... prévu
using System;
using Moq;
using System.Collections.Generic;
namespace MoqDemo {
public interface IView {
List<string> Names { get; set; }
}
public class Controller {
private IView view;
public Controller(IView view) {
this.view = view;
}
public void PopulateView() {
List<string> names = new List<string>() { "Hugh", "Pugh", "Barney McGrew" };
view.Names = names;
}
public class MyApp {
public static void Main() {
Mock<IView> mockView = new Mock<IView>();
// This works - and the expectation is verifiable.
mockView.ExpectSet(mv => mv.Names);
// None of the following can be verified.
// mockView.ExpectSet(mv => mv.Names, It.Is<Object>(o => o != null));
// mockView.ExpectSet(mv => mv.Names, It.Is<List<string>>(names => names.Count == 3));
// mockView.ExpectSet(mv => mv.Names, It.IsAny<IList<String>>());
Controller controller = new Controller(mockView.Object);
controller.PopulateView();
try {
mockView.VerifyAll();
Console.WriteLine("Verified OK!");
} catch (MockException ex) {
Console.WriteLine("Verification failed!");
Console.WriteLine(ex.Message);
}
Console.ReadKey(false);
}
}
}
}
Il n'y a pas une telle surcharge - même dans la dernière version - mais la syntaxe de rappel est exactement ce que je cherchais. Merci. –