我正在嘗試構建一個單元測試。 該類位置在第三方庫中實施。但是對於我的單元測試,我需要將Size屬性設置爲特定值。C#使用內部屬性設置器模擬一個類
public class Position
{
private double _size;
private double Size
{
get
{
return _size;
}
internal set
{
_size = value;
}
}
}
我看到這篇文章:How do you create a unit-testing stub for an interface containing a read-only member? 但無法弄清楚如何使它爲我工作。
這是被測試的類(只是一個簡單的例子)。該pos
參數在CalcPositionMetric()
方法必須是Position
類型:
public class PositionMetrics
{
public PositionMetrics()
{}
public double CalcPositionMetric(Position pos)
{
return 2 * pos.Size;
}
}
這裏是我的一塊單元測試:
using NUnit.Framework;
using NMock;
[TestFixture]
public class PositionUnitTests
{
[Test]
public void TestPosition()
{
Mock<Position> tmpPosMock = mFactory.CreateMock<Position>();
tmpPosMock.Expects.One.GetProperty(v => v.Size).WillReturn(7); /* !!! Exception !!! System.ArgumentException : mock object position has a getter for property Size, but it is not virtual or abstract */
/* Execute Test with tmpPositions*/
PositionMetrics pm = new PositionMetrics();
double result = pm.CalcPositionMetric(tmpPosMock.MockObject)
Assert.AreEqual(14, result);
}
}
但你可以看到我得到一個異常。有人能幫我解決這個問題嗎?任何其他解決方案也歡迎!
乾杯 康斯坦丁
你有'[彙編:InternalsVisibleTo(「My.Tests.Project」)] '裏面有'位置'的裝配? – NikolaiDante
@NikolaiDante: 我不知道。位置類在第三方庫中。它回答你的問題嗎? – Konstantin
是的,謝謝,這使得事情更清楚 – NikolaiDante