Я ударил в тупик с помощью Machine.Fakes. Я не могу понять, как издеваться над параметром out
, используя только Machine.Fakes equipment. Из-за a bug в RhinoMocks я переключил адаптер mfakes на FakeItEasy. Насколько я могу судить, любой из адаптеров должен быть взаимозаменяемым.Как мне издеваться над параметрами с помощью Machine.Fakes независимо от фреймов?
Проблема в том, что это привело к тому, что тесты «out» потерпели неудачу, все, что было похоже на это, больше не компилируется, потому что Arg
был Rhino.Mocks.
The<IMembershipService>()
.WhenToldTo(x => x.CreateUser(Param<string>.IsAnything,
Param<bool>.IsAnything,
Param<object>.IsAnything,
out Arg<MembershipCreateStatus>
.Out(MembershipCreateStatus.UserRejected)
.Dummy))
.Return(user);
Я попытался с помощью «фиктивного» локальной переменного, установить на то же значение оригинала Arg<T>
пары установить его, но это вызвало мои тесты на провал - кажется, что значение не является прошел сквозь! Arg<T>
действительно имел решение, но я больше не могу его использовать, так как это часть Rhino.Mocks.
+1 для обновления.Похоже, это работает только на пустых методах? Кажется немного ограниченным, поскольку во многих случаях параметр «out» используется для возврата дополнительного возвращаемого значения. – MattDavey
Да, @MattDavey, я применил это только для методов void. Я согласен, что это ограничение, но его реализация для запросов осложнила бы API. –
Кроме того, поддержка параметров не была первоначально реализована, потому что они считались плохим дизайном. Я думаю, что это вариант, который стоит иметь, поскольку даже .NET Framework использует параметры. Но я бы не зашел так далеко, чтобы сказать возвращаемое значение. И параметр out в одном методе - хороший дизайн. Я бы сказал, либо вернул кортеж, либо имел несколько параметров. Таким образом, я сохранил MFakes таким образом. –