C# 单元测试对象到对象映射
我被要求协助编写一些对象到对象映射的MS单元测试代码。有人能建议什么级别的测试适合测试映射功能吗 下面显示的是一些(非生产)示例代码C# 单元测试对象到对象映射,c#,unit-testing,C#,Unit Testing,我被要求协助编写一些对象到对象映射的MS单元测试代码。有人能建议什么级别的测试适合测试映射功能吗 下面显示的是一些(非生产)示例代码 public class Foo { public enum FooType { Active, Deleted, Open, Closed } public bool IsConditionMet { get; set; } public FooType SimpleType { get; set; }
public class Foo
{
public enum FooType
{
Active, Deleted, Open, Closed
}
public bool IsConditionMet { get; set; }
public FooType SimpleType { get; set; }
}
public class Bar
{
public string SomeCondition { get; set; }
public string SomeAbbreviatedType { get; set; }
}
public static class BarMapper
{
// sample to mapping code
public static Foo Map(Bar bar)
{
var foo = new Foo
{
IsConditionMet = bar.SomeCondition.Equals("y", StringComparison.OrdinalIgnoreCase)
};
// this is sample code and not used in production
switch (bar.SomeAbbreviatedType)
{
case "A":
foo.SimpleType = Foo.FooType.Active;
break;
case "D":
foo.SimpleType = Foo.FooType.Deleted;
break;
case "O":
foo.SimpleType = Foo.FooType.Open;
break;
case "C":
foo.SimpleType = Foo.FooType.Closed;
break;
}
return foo;
}
}
我不是在寻找单元测试的定义、如何编写单元测试或对TDD的解释,而是在寻找一个例子,说明在上面的例子中您将编写什么样的单元测试
注意:不幸的是,由于源数据的性质,使用类似的映射框架不会为项目增加任何价值
更新:这是我关于适当测试级别的示例。
[TestMethod]
public void IsMappingToIsConditionMetCorrect()
{
var fooIsConditionMetShouldBeTrue = BarMapper.Map(new Bar { SomeCondition = "Y" });
var fooIsConditionMetShouldBeFalse = BarMapper.Map(new Bar { SomeCondition = "N" });
var fooIsConditionMetShouldBeFalse_BecauseSomeConditionIsInvalid = BarMapper.Map(new Bar { SomeCondition = "SOMETHING" });
Assert.IsTrue(fooIsConditionMetShouldBeTrue);
Assert.IsFalse(fooIsConditionMetShouldBeFalse);
Assert.IsFalse(fooIsConditionMetShouldBeFalse_BecauseSomeConditionIsInvalid);
}
[TestMethod]
public void TestsCanBuild()
{
var fooAbbreviatedTypeShouldBeA = BarMapper.Map(new Bar { SomeAbbreviatedType = "A" });
var fooAbbreviatedTypeShouldBeD = BarMapper.Map(new Bar { SomeAbbreviatedType = "D" });
var fooAbbreviatedTypeShouldBeO = BarMapper.Map(new Bar { SomeAbbreviatedType = "O" });
var fooAbbreviatedTypeShouldBeC = BarMapper.Map(new Bar { SomeAbbreviatedType = "C" });
Assert.AreSame(Foo.FooType.Active, fooAbbreviatedTypeShouldBeA);
Assert.AreSame(Foo.FooType.Deleted, fooAbbreviatedTypeShouldBeD);
Assert.AreSame(Foo.FooType.Open, fooAbbreviatedTypeShouldBeO);
Assert.AreSame(Foo.FooType.Closed, fooAbbreviatedTypeShouldBeC);
// TODO: test for an incorrect "SomeAbbreviatedType" property value
}
您的测试看起来相当合理(当您实现TODO:test以获取不正确的“some缩写类型”属性值时),您可以测试的就不多了。我个人会更深入地研究一点错误处理,例如,Bar中的某些缩写类型为空是否有效?也许应该是一个枚举,等等。?但从测试的角度来看,这没关系。您需要的是测试覆盖率数据,它测量测试代码与总代码的比率。虽然你的测试可能会提供一个很高的比率,但除了猜测之外,你没有办法知道这一点。您可以从测试覆盖率工具获得准确的数据
多种语言的测试覆盖工具(包括java、C++、C++、C和COBOL),可以在
找到。谢谢确认我的方法