У меня проблема с издевательским интерфейсом с методом (async). Интерфейс выглядит следующим образом:FakeItEasy выбрасывает ExpectationException
public interface IDataAccessLayer
{
Task<bool> ExistsUserAsync(string username, CancellationToken cancellationToken);
Task<IUser> CreateUserAsync(string username, string password, DateTime dateOfBirth, CancellationToken cancellationToken);
}
.. параметр CancellationToken там всегда создается и передается извне во время выполнения (через NancyFx), и когда насмешливый звонки внутри метода испытаний, как это:
var validSignupRequest = new UserSignupRequest()
{
Username = "meh-spacey_space",
DateOfBirth = DateTime.Now.Subtract(TimeSpan.FromDays(365*35)),
Password = "someproper_passw*rd"
};
var testDataAccessLayer = A.Fake<IDataAccessLayer>(options => options.Strict());
var fakeUserInstance = A.Fake<IUser>();
A.CallTo(() => fakeUserInstance.Username).Returns(validSignupRequest.Username);
A.CallTo(() => testDataAccessLayer.ExistsUserAsync(validSignupRequest.Username, CancellationToken.None)).Returns(false); // works
A.CallTo(() => testDataAccessLayer.CreateUserAsync(validSignupRequest.Username, validSignupRequest.Password, validSignupRequest.DateOfBirth, CancellationToken.None)).Returns(fakeUserInstance); // does not work/throws ExpectationException
.. издевались вызов .ExistsUserAsync (...) работает, то .CreateUserAsync один делает не работа/бросает ExpectationException.
Я проверил базовый код, который тестируется, и вызов выполняется с использованием тех же значений для метода .CreateUserAsync (...) & Я подозревал, что dateOfBirth является виновником, но, по крайней мере. Клещи мудрые, это точно то же самое.
Я немного сомневаюсь в том, как FakeItEasy выполняет согласование подписи/параметра, потому что теоретически, что вызов IS издевается, но FakeItEasy говорит, что это не так. Пока это выигрыш.
Кто-нибудь знает, что не так в моем методе насмешливых звонков?
Я специально установил .Strict(), чтобы увидеть, что/что-то происходит здесь. –
Возможно, мне что-то не хватает, но я скопировал ваш образец кода в решение, добавил определения заглушки для 'IUser' и' UserSignupRequest', и мой тест проходит. Конечно, у меня есть столько же кода, сколько вы вставили, до 'A.CallTo (() => testDataAccessLayer.CreateUserAsync ...)'. (Я положил его в https://gist.github.com/blairconrad/a8f90d9d8ea04cee5e84) Вы говорите, что 'A.CallTo' терпит неудачу? Или что есть некоторый тестовый код, который у вас есть после третьего «A.CallTo», который терпит неудачу? Если последний, пожалуйста, включите его. Если первое, вы можете вставить полное исключение, которое повышает FakeItEasy? –
Блэр, самый последний A.CallTo терпит неудачу, да с вышеупомянутым ExpectationException (метод .CreateUserAsync упоминается в сообщении исключения). Я далеко от машины, я расскажу подробнее подробнее) –