Я намагаюся встановити властивість 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. Натомість він би поговорив із обгорткою. Маючи інтерфейс для обгортки, тестувати контролер буде дуже просто.