需要一些建議......我是新來的嘲弄東西了,正在寫一些MOQ測試......而且我正在試驗一個接口,我必須測試:嘲笑一個界面與一個類嘲弄
說我有這個接口:
interface IAWClient
{
void Login(string);
}
我寫我喜歡這個MOQ測試...
MOQ測試1:
[Test]
public void LoginTest()
{
Mock<IAWClient> m = new Mock<IAWClient>();
m.Setup(x => x.Login("Joe"));
m.Object.Login("Joe"); <<-- this is the line I am interested in
}
但已經看到無數的例子,其中混凝土類用於測試界面......像這樣的:
public class AdmissionMngr
{
IAWClient m_IAWClient;
public AdmissionMngr(IAWClient iaw)
{
m_IAWClient = iaw;
}
public void Admit(string name)
{
m_IAWClient.Login(name);
}
}
使用像這樣的模擬測試:
MOQ測試2:
[Test]
public void LoginTest()
{
Mock<IAWClient> m = new Mock<IAWClient>();
m.Setup(x => x.Login("Joe"));
AdmissionMngr admin = new AdmissionMngr(m.Object);
admin.Admit("Joe"); <<-- this is the line I am interested in
}
對於所示的兩條線......是最小起訂測試1和最小起訂測試2是否相等? 爲什麼或爲什麼不?
非常感謝!
那麼在這兩種情況下模擬調用的方法是相同的。最後都是用''Joe''調用'Login'方法一次。你可以通過運行調試器來看到這一點。你使用哪一個取決於你正在測試的內容。後者可能是測試'AdminMngr'類的一個好方法。第一個測試似乎是無用的;你正在創建一個模擬並告訴它期待一個特定的方法調用,然後明確地調用你自己的方法。這總是會成功,並沒有告訴你任何事情。 –
模擬就像一個空洞的類,它去除了所有的邏輯。你不想測試一個模擬。如果你這樣做,你會測試莫克如何表現,而不是你的班級。 –