c# - 集成测试(纯文本文件填充数据库)

标签 c# database text integration

我们的团队在测试方面还很陌生。我们是第一次使用 scrum。 在第一个冲刺中,我们在 GUI 上有一个按钮。按下按钮会将文本文件的内容转换为数据库(在新线程/任务中)。 GUI 将显示任务已启动,并将轮询任务的状态。

我们知道如何使用 TDD 方法对所有内容进行单元测试。但完成后我们必须进行集成测试。

我们需要在集成测试中执行什么样的测试? 我们是否需要通过测试不同的文件来检查数据库中的所有内容是否正确填充? (即:关系、存储为 varchar(xxx) 的具体格式等?)

如果是这样:这可能相当复杂,对吧?因为你没有 1 或 2 个输入参数,但你有一个完整的文件(我的意思是文件的内容!!!),它是可变的以进行测试。然后,您可以对这一按钮进行数百次甚至数千次测试。最糟糕的是:大多数测试(即格式化)已经在单元测试中进行了测试。

互联网上的大多数示例都显示更多类似 gui 的测试作为集成测试(或者下面的示例是验收测试?): 使用正确的用户名和密码登录 - 输入:姓名+密码 - 预期输出:重定向到主页

使用错误的用户名和/或密码登录 - 输入:名称和密码(错误) - 预期输出:警告(登录失败,用户名或密码不正确)

最佳答案

您的问题涵盖了尝试转向更好的测试和环境 build 程序的许多领域。首先让我们来谈谈集成测试。

对于集成测试,您在很大程度上需要一个空数据库,因为您正在测试给定现有的一组特定数据,您可以查询该数据并获得所需的结果。

让我们使用一个简单的示例,例如 UserFinder 类,您希望能够在系统中查找具有给定名称的用户并获取可用的模型。

public class UserFinder
{
    private SomeDbContext _dbContext;

    public UserFinder(SomeDbContext dbContext)
    { _dbContext = dbContext }

    public User FindUser(string name)
    { _dbContext.Find<User>(new FindUserByNameQuery(_dbContext, name)); }
}

现在,在上面,虽然它是一个相当垃圾的类,但我们可以测试给定数据库中名为“Tester”的用户,当您调用 FindUser("Tester") 时,您应该取回该用户模型。

因此,作为此测试的一部分,您需要首先在数据库中设置预期的用户,然后您将创建用户查找器,为其提供真实数据库连接,然后您将查询名为“Tester”的数据库并证明您已恢复该模型。

通过这种方式,您可以在任何上下文中运行该测试,无论是 IDE、构建脚本还是命令行,并且您将获得一致的结果,因为您的测试是独立的,它会设置场景、运行测试并验证验收标准。然后,一旦测试完成,所有数据都应该被删除,重点是您只设置给定测试所需的数据,并且通常只在该测试中设置它。

现在理想情况下,由于集成测试和验收测试的运行速度比单元测试慢得多,您只想测试单元测试中未涵盖的内容,但同时您想确保只测试您的逻辑,就像您可以使用 NHibernate 轻松创建上面的测试场景一样,您只需证明 NHibernate 有效即可,但这不是您的目标。 美国不可能告诉您需要测试什么,因为我们不知道您的项目或您想要实现的目标,但您应该对您的应用程序有一些了解逻辑流,如果您在该流中看到连接到数据库或文件系统的任何点,或者通过某些其他外部边界传递到具有业务逻辑的应用程序,那么您可能需要放入一个测试场景。

关于c# - 集成测试(纯文本文件填充数据库),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12424750/

相关文章:

python - 我应该使用什么数据结构进行情感分析?

c# - 使用 Linq 如何从两个表中获取用户列表及其上次登录

sql - 该查询的性能调整?

text - 如何在 Vscode 中调整非文本编辑器字体大小

SQL:合并两个没有 'Join on' 的表

数据库设计 - 是否应将日期用作主键的一部分

jquery 将文本标签转为 html 标签

c# - 在 C# 7 中创建一个 System.ValueTuple 数组

c# - 未从 Godaddy Hosted Exchange 收到 Exchange 2007 推送通知

c# - 如何在 foreach 循环中的每次迭代后进行延迟?