2013-03-13 30 views
2

我有一个测试方法...TDD - 为什么这个Assert.AreSame通过?

[TestMethod] 
public void MainViewModel_PropertiesReflectDataEntityProperties() 
{ 
    // Arrange 
    var facilityDataEntity = MockRepository.GenerateStub<FacilityDataEntity>(); 
    var shopOrderDataEntity = MockRepository.GenerateStub<ShopOrderDataEntity>(); 

    // Act 
    MainViewModel mainViewModel = new MainViewModel(facilityDataEntity, shopOrderDataEntity); 

    // Assert 
    Assert.AreSame(facilityDataEntity.Value, mainViewModel.FacilityValue); 
} 

...并测试通过。但是,我还没有将DataEntity的属性映射到MainViewModel的属性呢!怎么会这样?我认为AreSame检查两个引用是否指向同一个实例。

public class MainViewModel 
{ 
    private readonly FacilityDataEntity facilityDataEntity; 
    private readonly ShopOrderDataEntity shopOrderDataEntity; 

    public MainViewModel(FacilityDataEntity facilityDataEntity) 
    { 
     this.facilityDataEntity = facilityDataEntity; 
    } 

    public MainViewModel(FacilityDataEntity facilityDataEntity, ShopOrderDataEntity shopOrderDataEntity) 
    { 
     this.facilityDataEntity = facilityDataEntity; 
     this.shopOrderDataEntity = shopOrderDataEntity; 
    } 

    public ShopOrderDataEntity ShopOrderDataEntity 
    { 
     get { return shopOrderDataEntity; } 
    } 

    public FacilityDataEntity FacilityDataEntity 
    { 
     get { return facilityDataEntity; } 
    } 

    public int ShopOrder { get; set; } 

    public decimal RequiredQuantity { get; set; } 

    public string ItemCode { get; set; } 

    public string ItemDescription { get; set; } 

    public string FacilityValue { get; set; } 

    public string FacilityLabel { get; set; } 

    public static IEnumerable<MainViewModel> TranslateDataEntityList(IEnumerable<FacilityDataEntity> facilityDataEntityList) 
    { 
     foreach (FacilityDataEntity facilityDataEntity in facilityDataEntityList) 
     { 
      yield return new MainViewModel(facilityDataEntity); 
     } 
    } 

    public static IEnumerable<MainViewModel> TranslateDataEntityList(FacilityDataEntity facilityDataEntity, IEnumerable<ShopOrderDataEntity> shopOrderDataEntityList) 
    { 
     foreach (ShopOrderDataEntity shopOrderDataEntity in shopOrderDataEntityList) 
     { 
      yield return new MainViewModel(facilityDataEntity, shopOrderDataEntity); 
     } 
    } 
} 
+0

你调试facilityDataEntity.Value'的'价值观和'mainViewModel.FacilityValue' – FosterZ 2013-03-13 08:18:11

+0

同样的问题也适用于Assert.ReferenceEquals – Heliac 2013-03-13 08:18:26

+4

据推测,他们在这一点上两者'null'。 – 2013-03-13 08:20:49

回答

6

在一切伪装之下,这些测试只是使用Object.ReferenceEquals

真正如果objA是同一个实例objB或者如果两者都;否则,虚假

2

在这种情况下,我会说它比较null与null,这是相同的。

3

我猜这是因为他们都是null