如何开始自动测试大型应用程序?

时间:2011-01-11 16:08:50

标签: .net database automated-tests

编辑:感谢ncie评论者,我得到了单元和自动测试之间的区别,所以我重命名了主题

Environement:.net 2.0,sql server 2005,windows server 2003

我读过这篇文章:

http://www.codeproject.com/KB/tips/convince.aspx

这家伙正在谈论如何在不改变所有内容的情况下为现有应用添加自动化测试。

而且我必须说这篇文章非常精彩,让我想尝试一下!

所以我们的系统几乎相同:所有数据都可以通过Web服务访问,因此我们可以轻松地(例如使用soapui)对这些Web服务进行一些自动化测试。

但是:数据库怎么样?要进行一些自动化测试,我们需要在数据库中拥有与自动化测试相对应的正确数据。

例如,如果我想进行自动化测试,检查软件是否在客户端名称为空时引发错误,我需要在我的数据库中添加一个空名称的客户端。

以下是我认为我能做到的事情:

  • 使用所需的一切创建服务器(iis,sql server ...)
  • 添加一些东西,以便此服务器的日期永远不会改变,所以我不必在自动化测试中更改时间
  • 在我的数据库中添加我需要进行自动化测试的记录

问题:在10次自动测试之后,数据库将是一个很大的混乱,我永远不会知道哪个记录是针对哪个自动化测试的。 我的想法是在每张桌子上添加一个“TEST_NAME”栏目,但在我看来它有点脏。

你有没有尝试过这种技术?你使用了一些特定的工具吗?我的思维方式是好的吗? (或至少是一个好的)。

由于

编辑:这个帖子我得到2 -1,我想知道为什么所以我不会两次犯同样的错误。

3 个答案:

答案 0 :(得分:2)

如果您的单元测试正在进入持久层,您实际上可能正在做类似于集成测试的事情。你应该做什么在单元测试期间抽象你的数据库,这样你只测试逻辑而不是实际的持久性介质。这使您可以专注于业务层逻辑。这说起来容易做起,因为它取决于数据层的架构。

数据层通常是推入和拉出的简单问题,因此我们可以说您可以将数据层删除到以下界面:

interface IRepository
{
   GetModel(id);
   SaveModel(model);
}

然后在您的单元测试中,可以使用此接口存根/模拟您的数据层。这样,您可以告诉数据库的存根返回您想要的任何值,并且您可以编写一个测试,以便在发生这种情况时为预期的行为提供资源。

答案 1 :(得分:0)

可能有比我想到的更好的解决方案,但为什么不使用不同的数据库进行单元测试并清除所有内容以准备另一个测试周期。

答案 2 :(得分:0)

如果您可以在每批测试之前生成测试数据,那么您的记录开始时的ID等于可被100整除的下一个数字。因此,如果最大记录为350,则生成400并开始测试400及以上。当你的数据库变得非常大时,删除所有内容。