1)这些测试应该使用真实的数据库数据吗?我的意思是我必须连接到真实的数据库?

如果要测试软件与数据库之间的集成,那么可以,您应该使用真实的数据库(理想情况下应使用生产中使用的版本)。如果不应将数据库包含在测试中,则可以替换其他存储机制(如果使用适配器模式或数据库抽象库,则可能是可行的)。请注意,如果您手动编写查询,则SQL可能与数据库有关,因此您不能替换其他数据库。

2)我想我不能使用公用数据库,为此我应该使用专用数据库,但是我的大学不能使用我的测试,因为他们没有我的数据库。那该怎么办呢?

用于测试的数据库应仅在测试运行期间用于该测试。之后,可以将其清除并用于其他测试运行。因此,您确实需要专用的测试数据库。理想情况下,该数据库在您的开发计算机上本地运行,但是集中管理它们也可以工作(如果您必须遵守专有许可证,甚至可能是必需的)。

由于您的软件将与不同的生产和测试数据库一起运行,因此您需要可配置的特定数据库,例如通过从环境变量读取连接字符串。如果已将这些配置文件签入版本控制,请不要将任何环境之间不同的信息放入配置文件。相反,请实施一种使用私有配置的方法,例如通过将config作为命令行参数或环境变量提供。当然可以检入配置模板或特定环境的配置,例如生产配置。

3)我必须将真实数据传递给控制器​​,还是可以提出随机数据?对数据库数据也有同样的问题。如果是真实的,我将需要从浏览器和其他东西获取数据...

由于法律限制,例如,可能不允许您使用真实数据。隐私法规,例如HIPAA或GDPR。如果您的测试设置有错误,则还存在真实数据可能偶然导致现实世界操作的风险,例如发送电子邮件或对第三方系统产生费用。

相反,更喜欢模拟场景并使用该数据。如果您的软件具有用户界面,则可以手动播放场景并捕获该数据以供日后重播。我还通过解析调试级别的日志文件并从任何个人数据(例如确切的时间戳,IP地址,名称,电子邮件等)中手动清除了这些数据,从而收集了测试数据。

4)如果我在单元测试中测试了这种交互,是否真的需要这些集成测试?我只是使用模拟而不是真实数据。

如果使用了模拟,则只测试了一半的接口,但未测试两个接口的集成。这就像测试电源插座是否有电,测试插头的形状正确,而不是在将设备插入插座时测试设备是否运行。

单元测试对于隔离地仔细测试某些组件非常有用,但是它们通常不适合作为主要测试策略。特别是对于Web应用程序,运行端到端测试(通常是在集成或系统测试的规模上)通常要容易得多。相关的浏览器自动化工具广泛可用,如果您只需要测试REST API,则可以使用更多工具。

5)不是系统测试而是集成?

集成测试集成了部分但不是全部组件,其他组件将被存根替换。系统测试包括所有实际组件。通常,集成测试仍会排除第三方服务,而仅集成本地组件。