2016-07-27 2 views
1

Я пытаюсь Moq для тестирования abstract class method.Единичный тест - Moq абстрактный класс с SetOwinContext

var mock = new Mock<BaseStudentController>(); 
mock.CallBase = true; 
var ta = mock.Object; 
var result = await ta.ActivateStudent"[email protected]", true); 

Это успешно издевается над базовым классом, и он ударяет по методу в моем абстрактном классе.

Проблема:

Однако мой абстрактный класс также ожидает Request.GetOwinContext. Я не знаю, как я могу это сделать вместе с моей просьбой.

ответ

2

Вы должны установить ControllerContext перед вызовом контекста Owin ActivateStudent

ta.ControllerContext = new HttpControllerContext { Request = new HttpRequestMessage() }; 
ta.Request.SetOwinContext(/* mock IOwinContext here */); 

Образца издеваться:

var owinMock = new Mock<IOwinContext>(); 
owinMock.Setup(o => o.Authentication.User).Returns(new ClaimsPrincipal()); 
owinMock.Setup(o => o.Environment).Returns(new Dictionary<string, object> { {"key1", 123} }); 
var traceMock = new Mock<TextWriter>(); 
owinMock.Setup(o => o.TraceOutput).Returns(traceMock.Object); 
+0

Спасибо поняло вашу точку зрения. Я уже потратил время на SetOwinContext(), но буквально не уверен, как я могу издеваться над этим? Любая идея – immirza

+0

попробовала 'new Mock (). Object'? просто настройте требуемое поведение. –

+0

Спасибо, дай мне несколько минут, я проверю и вернусь, решает ли он мою проблему или нет. – immirza