Tôi đang phát triển các thử nghiệm cho một ứng dụng. Có một phương thức có một mảng params
làm tham số. Tôi đã thiết lập các phương pháp bằng cách sử dụng Moq nhưng khi tôi chạy thử nghiệm, giá trị trả về của phương thức là null, có nghĩa là nó không bị chế giễu.Phương pháp thiết lập với Params Array
Dưới đây là một mẫu mã:
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;
}
}
Mã giả trông như thế này:
var mock = new Mock<ITicketManager>();
mock.Setup(m => m.GetFirstTicketInQueueIfMatches(It.IsAny<string>()))
.Returns(p => {
if(p.Contains("A"))
return "A";
return null;
});
Tại sao nó không bao giờ chạm phương pháp chế giễu?
@DiegoAC: Vâng, bạn đã có nó * có điều kiện * việc trở về của 'null' anyway. Bạn đã thử làm cho nó trở lại "Foo" thay vì nếu 'p' không chứa' "A" '? Bằng cách đó bạn ít nhất sẽ thấy nó được gọi ... –
Câu trả lời tuyệt vời Jon. Cảm ơn. Thực ra tôi chỉ nhận được một chuỗi duy nhất. Giải thích về trình biên dịch rất hữu ích. –