【发布时间】:2021-05-05 13:35:03
【问题描述】:
我有一个接口Arbiter:
public interface Arbiter
{
ContextData GetContextData();
}
我有一个实现这个接口的类:
public class ContextArbiter : Arbiter
{
ContextData m_data;
public ContextArbiter()
:
base()
{
m_data = new ContextData();
}
public ContextData GetContextData()
{
return m_data;
}
}
我有另一个类使用这个接口:
public class SelectData
{
private Arbiter m_Arbiter;
public SelectData(Arbiter Arbiter)
{
m_Arbiter = Arbiter;
}
public string RetrieveId()
{
return m_Arbiter.GetContextData().RouteId;
}
}
现在我想对这个类进行单元测试:
public class SelectDataTest : UnitTestBase
{
private Mock<Arbiter> Arbiter;
private SelectData SelectData;
[OneTimeSetUp]
public void OneTimeSetup()
{
Arbiter= new Mock<Arbiter>();
SelectData = new SelectData(Arbiter.Object);
}
}
现在这是我的测试:
[Test]
public void RetrieveRouteId_usingMockArbiter_shouldReturnCorrectRouteId()
{
var ContextDataMock = new Mock<ContextData>();
ContextDataMock.Setup(item => item.RouteId).Returns(Convert.ToString(64));
ContextArbiter.Setup(p => p.GetContextData()).Returns(ContextDataMock.Object);
Assert.AreEqual(Convert.ToString(64), SelectData.RetrieveRouteId());
}
当我运行测试时,我收到以下错误:
Message: System.NotSupportedException : Unsupported expression: item => item.RouteId
Non-overridable members (here: ContextData.get_RouteId) may not be used in setup / verification expressions.
我做错了什么?这个错误是因为我直接在 Mock 中使用了一个类吗?
var ContextDataMock = new Mock<ContextData>();
而不是接口。这种情况该怎么办?
ContextData 的定义如下所示:
public class ContextData
{
public string AgencyId { get; set; }
public int VhId { get; set; }
public string RouteId { get; set; }
public int EmployeeId { get; set; }
}
【问题讨论】:
-
你没有告诉我们
ContextData -
@KlausGütter - 添加了定义
标签: c# unit-testing moq