2012-07-17 71 views
0

所以这是越来越悲惨。我试图测试一些微软的垃圾会员资格库,他们只是很糟糕。我设法将一个接口放在Membership类的前面,然后遇到了实现ProfileBase的类的问题,并且我设法为它创建了一个接口,所以愚蠢的静态创建方法可能会被模拟,但我怎样才能嘲笑profileBase中的属性这是你使用那个愚蠢的类的唯一原因。认真的MicroSoft在这个时代不能修复他们的代码,所以你可以为它写一个怪异的单元测试。多可怜。这是我到目前为止已经试过从ProfileBase嘲讽属性

mockProfileFactoryService = new Mock<IProfileFactoryService>(); 
mockProfileFactoryService.Setup(x => x.GetUserProfile(It.IsAny<string>())).Returns(new DummyUserProfile(){FirstName = ""}); 

这是德伪类是什么样

public class DummyUserProfile: UserProfile 
{ 
    public new String FirstName { get; set; } 
    public new String LastName { get; set; } 
} 

我想我可以隐藏属性名字和姓氏的这种方式,但测试只是吹起来我可以看到它试图访问实际的UserProfile类中的属性。

有谁知道我该怎么做?认真地说 - 当他们从ProfilBase类继承时,其他人在做什么?

我也试过解压缩和接口使用reshaper,似乎工作,但当我嘲笑它,然后试图说.Return(profileMock.object)它爆炸说它不能转换和IUserProfile到UserProfile?在ARG之前我从未见过!

我的意思是 - 我讨厌改变我的代码,使其可测试,即检查这样的空值或愚蠢的废话,但我会如果我可以,在这种情况下,你不能做任何事情,因为你对此做了什么?

base["FirstName"] 

回答

0

因此,一个良好的咆哮后,我在执行力度

public string GetPropertyValue(string userName, string propertyName) 
{ 
    return (string)GetUserProfile(userName).GetPropertyValue(propertyName); 
} 

在我IProfileFacotryService想出了这个

string GetPropertyValue(string userName, string propertyName); 

然后但我不激动与 - 我一般不喜欢创造除了调用原始代码之外的任何其他接口,我不认为这真的是这样做 - 我的意思是这样,但意义似乎不太清楚?无论如何 - 我只是觉得有一个更好的方法来做到这一点,所以虽然这工作,我不介意一个更好的解决方案,如果存在。

显然,我现在可以嘲笑这一点,但在我的代码,我不得不说

taskBoardModel.Name = profileFactoryService.GetPropertyValue(userName, "FirstName"); 

我宁愿说

taskBoardModel.Name = profileFactoryService.GetUserProfile(userName).FirstName; 

反正 - 呸骗人的鬼话!