c# - TDD - 为什么这个 Assert.AreSame 通过?

标签 c# tdd mstest assert

我有一个测试方法...

[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);
        }
    }
}

最佳答案

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

true if objA is the same instance as objB or if both are null; otherwise, false.

关于c# - TDD - 为什么这个 Assert.AreSame 通过?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15379998/

相关文章:

c# - 在 Lambda 表达式中访问修改后的闭包

visual-studio-2010 - Visual Studio 2010 失败的测试引发异常

powershell - 如何在 powershell 中使用 VSTEST.CONSOLE.EXE 运行 mstest

unit-testing - 关于测试驱动开发的一些困惑

c# - 依赖私有(private)方法测试公共(public)方法的方法

c# - 在单元测试中模拟 HttpPostedFile

.net - Visual Studio 2012 中的错误调试代码 - 无法初始化客户端代理 : could not connect to

c# - 使用 List<MyClass> 数组创建单元测试

c# - moq 模拟 buffer[] 参数

c# - c# 项目中没有 main()