2014-10-16 2 views
0

У кого-нибудь есть идея, почему ниже все еще звонит YesService?MOQ - Почему ниже не насмешка?

Это почти кажется, что IYesService считается отдельно от YesService ..

Любые идеи?

public interface IYesService 
{ 
    string Hello(); 
} 
public class YesService : IYesService 
{ 
    public string Hello() 
    { 
     return "Yes"; 
    } 

} 

class Program 
{ 

    static void Main(string[] args) 
    { 
     var _mock = new Mock<IYesService>(); 
     _mock.Setup(x => x.Hello()).Returns("No"); 

     var service = new YesService(); 
     var result = service.Hello(); 

     Console.Write(result); 
     Console.ReadLine(); 
    } 
} 

ответ

3

Потому что вы не используете _mock вы создаете экземпляр YesService и вызвать метод по этому вопросу.

Вы можете использовать насмешливый, когда вы потребляют этот интерфейс:

public class ServiceUser 
{ 
    private IYesService _yesService; 

    public ServiceUser(IYesService yesService) 
    { 
     _yesService = yesService; 
    } 

    public string CallService() 
    { 
     return _yesService.Hello(); 
    } 
} 

Затем использовать его как это:

var serviceMock = new Mock<IYesService>(); 
serviceMock.Setup(x => x.Hello()).Returns("No"); 

var service = new ServiceUser(serviceMock.Object); 
var result = service.CallService(); 
+0

Я думал, весь смысл MOQ было издеваться YesService.Hello вернуть заданное значение ? Как бы вы переписали это? – DrZeuso

+1

С насмешкой вы издеваетесь над конкретным экземпляром, а не _all_ экземплярами этого интерфейса или класса. См. Мое последнее редактирование для фактического использования макета. – CodeCaster

+1

@DrZeuso Вы не издеваетесь над 'YesService.Hello()', вы издеваетесь над 'IYesServicve.Hello()' –

1

Вы создаете экземпляр YesService (конкретный класс) в вашем Основной метод. Линия вар служебное упразднится, и в результате линия вар должны стать:

var result = _mock.Object.Hello(); 

Попробуйте это ...

Смежные вопросы