Насмешка над конкретным экземпляром класса интерфейса - PullRequest
0 голосов
/ 23 мая 2018

Я пытаюсь издеваться System.Security.Principal.IIdentity.Тем не менее, я специально хочу заменить конкретный Claim во время теста.Проблема, с которой я столкнулся, заключается в том, что, хотя я могу смоделировать и заменить элементы интерфейса, у меня нет доступа к классу, пока он не будет решен и приведен внутри метода.

Вот мой конструктор Controller:

public MyController(IIdentity identity)
{
    _userIdentity = identity as ClaimsIdentity;

А вот мой код, в котором я пытаюсь смоделировать утверждения:

var mockClaim = new Claim("test", "test");

IIdentity identity = Substitute.For<IIdentity>();
((ClaimsIdentity)identity).Claims.Returns(new List<Claim>() { mockClaim });

Очевидно, это не работает, потому что identity на самом деле неИдентичность в этом случае.Хотя я задаю конкретный вопрос, относящийся к этой проблеме, мой более общий вопрос: существуют ли какие-либо методы для насмешки конкретного экземпляра класса интерфейса внутри макета интерфейса?

(я понимаю, что могу просто обернутьвсе это в моем собственном интерфейсе и классе оболочки - но это похоже на излишество).

1 Ответ

0 голосов
/ 23 мая 2018

В этом случае вам нужно смоделировать ClaimsIdentity, а не IIdentity.Конечно, вы сможете передать повторный макет контроллеру, потому что ClaimsIdentity реализует IIdentity:

var identity = Substitute.For<ClaimsIdentity>();
identity.Claims.Returns(new List<Claim>() { mockClaim });
var controller = new MyController(identity);
// ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...