당신이 MOQ와 정적 메서드를 조롱 할 수 있음을 이해하지만 내 가능한 옵션이 비웃음 정적 메소드 옵션
내가 컨트롤러 클래스는public class CustomerController : BaseController
{
private ICustomerManager cm;
public CustomerController()
: this(new CustomerManager())
{
}
public CustomerController(ICustomerManager customerMan)
{
cm = customerMan;
}
public ActionResult EditContact(ContactVM model, IEnumerable<HttpPostedFileBase> Files, PageAction pageAction)
{
if (ModelState.IsValid)
{
InitializeContactVM(model); //throws an error
}
}
private void InitializeContactVM(ContactVM model)
{
model.Customer = cm.GetViewFindCustomerDetails((int)model.CustomerId);
model.ContactClassificationList = AddBlankToList(SelectLists.ContactClassifications(false));
model.ContactSourceList = AddBlankToList(SelectLists.ContactSources(false));
}
}
그리고 내 장치를 정의가 무엇인지 궁금 해서요 시험은 다음과 같습니다
public void Edit_Contact_Update_Existing_Contact()
{
var dataManager = new Mock<IReferenceDataManager>();
//dataManager.Setup(a=>a.GetContactClassifications()).Returns()
var contact = InitializeContact();
var contactvm = new ContactVM(contact);
var fileMock = new Mock<HttpPostedFileBase>();
var files = new[] {fileMock.Object};
var mocManager = InitializeMocManagerContact();
mocManager.Setup(a => a.GetContactById(It.IsAny<int>())).Returns(contact);
mocManager.Setup(a => a.UpdateContact(It.IsAny<ContactVM>(), It.IsAny<string>())).Returns(contact);
var controller = new CustomerController(mocManager.Object);
var controllerContext = InitializeContext();
controller.ControllerContext = controllerContext.Object;
// mocManager.CallBase = true;
var result = controller.EditContact(contactvm, files, PageAction.Default) as ViewResult;
var model = result.ViewData.Model as ContactVM;
Assert.IsTrue(model.ContactId == contact.CONTACT_ID);
}
문제는이 SelectLists.ContactClassifications (거짓)이, 그 다음 데이터베이스에 접속하려고 호출하는 개인 방법입니다.
selectList의 클래스는
public static class SelectLists
{
private static readonly ReferenceDataManager _dataManager = new ReferenceDataManager();
public static SelectList ContactClassifications(bool includeDeleted)
{
var data = _dataManager.GetContactClassifications();
}
}
같이 정의되며, 그것은 그것이 내가 (조롱 할 수있을 것 같은 느낌이 있다는 selectList의에서 GetContactClassifications를 호출하는 라인의 경우가 될 수 없다 호출하는 방법 그것은 정적이기 때문에 조롱을 받았다). 이것은 인터페이스를 구현합니다.
Controller (InitialiseContactVM)의 개인 메소드가 조롱받을 수있는 몇 가지 방법이 있더라도 그것은 나에게 적합 할 것입니다.
이러한 작업을 수행 할 수있는 방법이 있습니까?
환호 Alejandro, 답장을 보내 주셔서 대단히 감사합니다. 변경을했으며 작동 중입니다. 나를 위해 잘 – jazza1000