我試圖嘲笑一種方法,它編譯沒有錯誤,但當我運行一個測試奇怪的事情發生。其實方法犯規模擬也許我不明白不便...(犀牛嘲笑不嘲笑一種方法
這裏有一個代碼:
public class Robot
{ ....
public virtual bool range(IObs ob, double range)
{
double dist = ob.distanceSq(this);
if (dist < range)
return true;
else
return false;
}
}
...
public interface IObs
{
double distanceSq(Robot r);
}
...
單元測試:
[TestClass]
public class UnitTest1
{
[TestMethod]
public void TestMethod1()
{
MockRepository mocks = new MockRepository();
IObs obstacleMock = mocks.CreateMock<IObs>();
Robot r = new Robot();
Expect.Call(obstacleMock.distanceSq(r)).IgnoreArguments()
.Constraints(Is.Anything())
.Return(5.5);
Assert.IsTrue(r.range(obstacleMock, 0.5));
}
}
I mock distanceSq() 。 當我調試我的測試時,我發現ob.distanceSq(this)爲0.0。 (不是1.5)。
怎麼了?
你在這裏有很多問題,我猜。這就是說,當精度很重要時,使用'decimal'而不是'double';否則你會發現你期望'1.5',但你會繼續得到像'1.49999999'或'1.50000001'這樣的東西。 (http://stackoverflow.com/questions/1165761/decimal-vs-double-which-one-should-i-use-and-when) –
@GrantWinney - 在這種情況下使用'deciaml'可能沒有用處 - double「對於大多數距離計算來說應該是足夠的了。 –
@AlexeiLevenkov,我指的是一個'decimal'將會保留你存儲在其中的_exact_數字,而'double'則不太準確(你可以將1.5存儲在'double'中,然後當你去使用它的值爲1.5000000001)。 –