分步功能测试自动化

计时表

我在C#中有一个基本类,从中可以为数据绑定方案创建继承的类。您可以将其视为.NETDataRow的替代品

我想自动测试典型行的生命周期,以确保对象状态和更改检测之类的内容始终保持一致。

我的第一个想法是简单地将单元测试类与可以执行多种操作以及随后的声明的方法一起使用,如下所示:

/*
For the sake of keeping this as simple as possible, let's just assume
that new instances can be created with a public constructor, as "unchanged".
*/

var row = new PocoTest(); // Derived from aforementionned base class

Assert.AreEqual(RecordStates.Unchanged, row.RecordState);
Assert.IsFalse(row.IsPropertyModified("MyProperty"));

row.MyProperty = "this is a new value";

Assert.AreEqual(RecordStates.Modified, row.RecordState);
Assert.IsTrue(row.IsPropertyModified("MyProperty"));

row.AcceptChanges();

Assert.AreEqual(RecordStates.Unchanged, row.RecordState);
Assert.IsFalse(row.IsPropertyModified("MyProperty"));

但是,这在单元测试范例中感觉不对,在该范例中,建议一次只测试一件事。

所以,我在这里寻求一些建议。我在想这个吗?我应该继续这样吗?还是有另一种更好,更适应的方式来完成这样的事情?

山姆·霍尔德

您的每个测试都应该测试一种合乎逻辑的东西。这可能需要几个步骤或断言来进行验证。这可以。

但是,您的测试在我看来就像3个测试。1验证创建后该属性未更改,然后一个验证其更改后的对象反映了该属性,然后一个在接受更改后验证状态又未更改的对象。

您目前如何称呼您的考试。我怀疑您在给它起一个名字时遇到麻烦,或者它的名称太长了。拆分它应该为您提供漂亮的描述性名称。

我会这样:

public void WhenRowIsCreatedItShouldBeInAnUnchangedState()
{
  var row = new PocoTest(); // Derived from aforementionned base class

  Assert.AreEqual(RecordStates.Unchanged, row.RecordState);
  Assert.IsFalse(row.IsPropertyModified("MyProperty"));
}


public void WhenPropertyIsChangedItShouldBeInAModifiedState()
{
  var row = new PocoTest(); // Derived from aforementionned base class
  row.MyProperty = "this is a new value";

  Assert.AreEqual(RecordStates.Modified, row.RecordState);
  Assert.IsTrue(row.IsPropertyModified("MyProperty"));
}

public void WhenChangesAreAcceptedItShouldBeInAnUnchangedState()
{
  var row = new PocoTest(); // Derived from aforementionned base class
  row.MyProperty = "this is a new value";
  row.AcceptChanges();

  Assert.AreEqual(RecordStates.Unchanged, row.RecordState);
  Assert.IsFalse(row.IsPropertyModified("MyProperty"));
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章