【发布时间】:2016-08-24 15:18:05
【问题描述】:
目前在我的项目的一部分中存在如下领域对象:
public class Address
{
public virtual string HouseName { get; set; }
public virtual string HouseNumber { get; set; }
public virtual string RoadName { get; set; }
public virtual string Postcode { get; set; }
public virtual string District { get; private set; }
}
District 属性是数据库中的一个计算列。由于数据访问提供者(实体框架)的要求,需要一个私有集。这在正常的程序流程中很好,因为永远不需要设置地区,因为在数据库中保存/更新地址记录时会更新它
我要测试的方法如下所示:
public IEnumerable<House> GetHousesWithinSameDistrict (int addressId)
{
var addressToMatch = _addressRepository
.FirstOrDefault(address => address.Id == addressId)
return _houseRepository
.Where(house => house.Address.District == addressToMatch.District)
}
当我尝试设置 addressToMatch 变量时,这给我带来了问题,因为我无法设置 District 属性,因此我无法编写测试来检查是否返回了正确匹配的地址。
我应该如何为此测试设置地址对象?
【问题讨论】:
-
也许,
protected internal+assembly:InternalsVisibleTo? -
@DeblatonJean-Philippe 相关,但恕我直言,肯定没有重复。
-
@DeblatonJean-Philippe 根本不是那个副本。
-
使它成为
protected set并使用setter 方法创建一个子类(作为testfixture 的私有类)是一种(不是很漂亮但实用的)解决方法。 -
没有看到你的测试很难给出建议,但是你可以使用你需要匹配的地址的Mock,并使用SetupGet返回你想要的值,你可以设置您需要使用反射的值,或者如果您使用 MS 测试框架,您可以使用 PrivateObject 设置值。 msdn.microsoft.com/en-us/library/ms244100.aspx
标签: c# unit-testing moq encapsulation access-modifiers