查看单个帖子
旧 2019-12-10, 16:49   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 使用输入参数存根对象

因此,我正在尝试对数据库连接器进行存根以便为其编写测试。问题在于数据库连接器是一个很薄的层,对其的查询有些开放性。我希望我的代码能够从数据库中请求一个变量,并且连接器应该可以。该调用的签名如下所示:

dim = getDimension(self,dimensionName,otherIndentifyingInformation) (这一切都在MATLAB中-希望答案与语言无关,或者至少在MATLAB中是不可行的。)

当我在代码中使用它时, dimensionName是存储在数据库中的几件事之一。如果代码调用它,但它不存在,那很好。这里的问题是我想测试一些代码,该代码对getDimension进行两次调用,例如:

alt = conn.getDimension('alt',otherID); str = conn.getDimension('str',otherID); 出于(希望)明显的原因,不能保证alt和str相同。实际上,它们通常不是。

所以,我的问题。如果我想对getDimension存根以返回良好的测试值,该怎么做?创建getDimensionAlt似乎很麻烦,因为可能从数据库中发出的东西数量是无限的,而且很难维护。是否有比将逻辑放入存根对象更好的方法?这似乎是错误的解决方法...

编辑:建议设置一个testDB。那么,我不必为每个测试用例设置一个testDB吗?在每个测试中,我必须创建一个数据库连接,将其作为存根返回,运行测试,然后清理数据库连接。似乎每个测试都会有很多开销,尤其是当它甚至不是我正在测试的系统时。

我想可以建立一个testDB,并每次用适当的值填充它。那是好习惯吗?

编辑2:也许我的问题尚不清楚。我有一小段代码正在尝试测试。与上面的两行相比,它并不复杂,我想对其进行干净的测试。问题在于,对getDimension调用进行存根取决于参数。我不需要在其他测试中重复使用此存根。

我认为答案可能是“可以在存根中包含简单的逻辑”。这一切都因以下事实而困惑,即MATLAB中没有匿名类或存根框架,因此很难,但是我想确保在开始并在MATLAB中编写存根框架之前,我在做什么在概念上是清楚的。


回答:
我认为,如果要进行自动集成测试或验收测试,则设置一个testdb是一个好主意。这通常要求您一次测试整个堆栈(UI,应用程序,数据库,服务等)的测试。

单元测试是完全不同的,它们在开发中而不是在测试中使用,因此它们应该更快地运行,更快地更改和更快地编写。通常,将单元测试仅取决于他们正在测试的一小段代码是一个好主意。这使它们不那么脆弱,更易于理解,并使开发人员更愿意经常运行它们。

在单元测试中使用存根是一个好主意。您似乎遇到的问题是,如果您想在许多测试中重用存根,它们的行为可能会变得非常复杂,在最坏的情况下,您正在重建它们应该代表的东西。如果您一次测试太多,也会发生这种情况。

解决方案是使用更多较小的存根,这些存根仅实现一个或几个测试的行为,并且使您的测试仅测试单个行为。一次测试大量行为的测试也很有用,但它们不是单元测试,您应该将它们移到集成测试套件中(并可以在真实数据库上运行)。我不确定matlab,但在许多语言中,您都有可用于创建存根和设置行为的模拟框架。



更多&回答...
poster 当前离线   回复时引用此帖