2014-10-16 42 views
0

任何人都有任何想法爲什麼以下仍然呼叫YesService?起訂量 - 爲什麼以下不嘲笑?

它似乎像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 2014-10-16 10:13:29

+1

嘲笑你嘲笑一個特定的實例,而不是該接口或類的_all_實例。看到我最後一次編輯實際使用模擬。 – CodeCaster 2014-10-16 10:14:05

+1

@DZZeuso你不是在嘲笑'YesService.Hello()',你在嘲笑'IYesServicve.Hello()' – 2014-10-16 10:17:55

1

正在創建YesService的實例(具體類)您的主要方法。該變種服務線的被取締,而VAR結果行應該變成:

var result = _mock.Object.Hello(); 

試一下......