/ / Неможливо встановити властивість controller.Url для простого тестування - asp.net-mvc, unit-testing, fakeiteasy

Неможливо встановити властивість controller.Url для простого тесту - asp.net-mvc, модульне тестування, fakeiteasy

Я намагаюся встановити властивість controller.Url, але цей тест не вдається.

Я написав цей тест, тому що не міг перевірити дію контролера через те, що контролер. Урл є нульовим.

    [TestMethod]
public void AccountController_Url_ShouldNotBeNull()
{
var target = new AccountController();
var url = new UrlHelper(
this.RequestContext(this.GetFakeHttpContextBase),
new RouteCollection());
target.Url = url;

target.Url.Should().NotBeNull();
}

Я використовую FakeItEasy для знущань над моєю HttpContextBase тощо. Будь-які ідеї?

Відповіді:

3 для відповіді № 1

Вам слід подумати про заглушку самого urlHelper, щось подібне (я використовую NMock - але я вважаю, що семантика повинна бути схожа на ваш глузливий фреймворк):

        var target = new AccountController();
var urlHelper = MockRepository.GenerateMock<UrlHelper>();

target.Url = urlHelper;
//Now you could stub the various functions of urlHelper, like:
//urlHelper.Stub(u => u.IsLocalUrl("blahUrl")).Return(true);

Є ще кілька питань. У UrlHelper немає віртуальних методів, і, отже, скручування методів буде складною. У такому випадку ви можете мати обгортку над UrlHelper - і ввести її в контролер. Використовуйте обгортку і делегуйте виклики фактичному екземпляру urlHelper.

Таким чином, ваш контролер не взаємодіє безпосередньо з urlHelper. Натомість він би поговорив із обгорткою. Маючи інтерфейс для обгортки, тестувати контролер буде дуже просто.