2012-03-20 32 views
6

Tôi đang viết một số bài kiểm tra đơn vị cho lớp Mô hình Xem của tôi. Hàm khởi tạo của lớp này được tiêm một ILoggerService. Giao diện này định nghĩa 1 phương thức GetLog trả về một ILogger. Một cái gì đó như dưới đây nơi này đại diện cho một lớp mà thực hiện ILoggable: -Làm thế nào để Giả lập ILogger/ILoggerService bằng cách sử dụng Moq

protected ViewModelBase(ILoggerService loggerService) 
    { 
     Logger = loggerService.GetLog(this); 
    } 

Tôi đang cố gắng để đơn vị kiểm tra phương pháp CreateNewOrder của tôi trông giống như dưới đây:

private void CreateNewOrder(INewOrderViewModel newOrderViewModel) 
    { 
     Logger.Log("Sending Create New Order Message", LogCategory.Info); 
     var createNewOrderMessage = new OrderMessage(newOrderViewModel); 
     _eventAggregator.GetEvent<CreateOrderEvent>().Publish(createNewOrderMessage); 
    } 

Làm thế nào tôi sẽ đi về Mocking ILoggerService sao cho một Logger hợp lệ được trả về? Tại thời điểm thử nghiệm đơn vị của tôi ném một NullReferenceExeception.

Tôi đang sử dụng Moq để chế nhạo.

Tôi tưởng tượng tôi cần phải làm một cái gì đó dọc theo dòng của

var loggerService = new Mock<ILoggerService>(); 
     loggerService.Setup(svc => svc.GetLog(??)) 

Nhưng tôi không thể xem như thế nào mà không làm lớp thử nghiệm của tôi thực hiện ILoggable.

Xin cảm ơn trước.

Trả lời

6

Tôi không chắc loại là thông số phương pháp GetLog, nhưng tôi cho rằng đó là một cái gì đó như object để dịch vụ nhật ký có thể xác định loại yêu cầu nhật ký. Bạn có thể sử dụng It để mô phỏng các tham số trong phương thức bạn đang thiết lập, như được thấy bên dưới.

var logger = new Mock<ILogger>(); 

var loggerService = new Mock<ILoggerService>(); 
loggerService.Setup(c => c.GetLog(It.IsAny<object>()) 
    .Returns(logger.Object); 

Sau đó, vượt qua logger.Object cho bất kỳ phương pháp hoặc loại nào cần ILoggerService.

+0

Rực rỡ. Điều đó làm việc một điều trị. Cảm ơn rất nhiều – user630190

+0

Để tham khảo, tôi sử dụng một cái gì đó như: 'var loggerMoq = Mock.Of >();' – Nordes

Các vấn đề liên quan