Opracowuję testy dla aplikacji. Istnieje metoda, która ma tablicę params
jako parametr. Ustawiłem metodę za pomocą Moq, ale kiedy uruchomię test, zwracana wartość metody jest zerowa, co oznacza, że nie jest ona kpiną.Metoda instalacji z parametrami Array
Oto przykładowy kod:
public interface ITicketManager {
string GetFirstTicketInQueueIfMatches(params string[] ticketsToMatch);
}
public class TicketManager : ITicketManager {
private Queue<string> ticketQueue = new Queue<string>();
public string GetFirstTicketInQueueIfMatches(params string[] ticketsToMatch) {
var firstQueuedTicket = ticketQueue.Peek();
var firstQueuedTicketMatchesAnyOfRequested = ticketsToMatch.Any(t => t == firstQueuedTicket);
if(firstQueuedTicketMatchesAnyOfRequested)
return firstQueuedTicket;
return null;
}
}
Kod mock wygląda następująco:
var mock = new Mock<ITicketManager>();
mock.Setup(m => m.GetFirstTicketInQueueIfMatches(It.IsAny<string>()))
.Returns(p => {
if(p.Contains("A"))
return "A";
return null;
});
Dlaczego nigdy nie uderza szydzili metody?
@DiegoAC: Cóż masz to warunkowo * * zawracania 'null' tak. Czy próbowałeś, aby zamiast tego zwrócił "Foo", jeśli 'p' nie zawiera' "A"? W ten sposób przynajmniej zobaczysz, że jest on wywoływany ... –
Doskonała odpowiedź Jon. Dzięki. Właściwie otrzymywałem tylko jeden ciąg znaków. Objaśnienie dotyczące kompilatora było bardzo przydatne. –