我正在尝试构建一个单元测试。 该类位置在第三方库中实施。但是对于我的单元测试,我需要将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