gpt4 book ai didi

cocoa - 用于单元测试的外部数据文件

转载 作者:行者123 更新时间:2023-12-03 16:10:52 24 4
gpt4 key购买 nike

我是单元测试的新手,我正在寻求一些最佳实践建议。我正在使用 Xcode 在 Cocoa 中进行编码。

我有一个方法可以验证用户输入的 URL。我希望它只接受 http://协议(protocol)并且只接受具有有效字符的 URL。

为此进行一次测试并使用测试数据文件是否可以接受?数据文件提供有效/无效 URL 的示例以及 URL 是否应验证。我还用它来检查错误消息的描述和域。

我为什么要这样做

我已经阅读了《使用 JUnit 在 Java 中进行实用单元测试》,其中给出了一个带有外部数据文件的示例,这让我认为这没问题。另外,这意味着我不需要使用非常相似的代码编写大量单元测试来测试不同的数据。

但另一方面......

如果我正在测试:

  • 无效字符
  • 无效协议(protocol)
  • 有效网址

所有内容都在同一个测试数据文件中(因此在同一个测试中)这会在以后给我带来问题吗?我读到,一项测试只能因一个原因而失败。

我现在做的还好吗?

其他人如何在单元测试中使用测试数据(如果有的话)?

最佳答案

一般来说,仅在必要时才使用测试数据文件。使用测试数据文件有许多缺点:

  • 测试代码分为测试代码和测试数据文件。这使得测试更难以理解和维护。
  • 您希望尽可能快地进行单元测试。进行不必要地读取数据文件的测试可能会减慢测试速度。

在某些情况下我确实使用数据文件:

  • 输入很大(例如 XML 文档)。虽然您可以使用字符串串联来创建大型输入,但它会使测试代码难以阅读。
  • 该测试实际上是测试读取文件的代码。即使在这种情况下,您可能也希望测试在临时目录中写入示例文件,以便测试的所有代码都位于一处。

我建议用代码编写测试,而不是在文件中编码有效和无效的 URL。我建议创建无效字符测试、无效协议(protocol)测试、无效域测试以及有效 URL 测试。如果您认为覆盖率不够,您可以创建一个小型集成测试来测试多个有效和无效的 URL。以下是 Java 和 JUnit 中的示例:

public void testManyValidUrls() {
UrlValidator validator = new UrlValidator();
assertValidUrl(validator, "http://foo.com");
assertValidUrl(validator, "http://foo.com/home");
// more asserts here
}

private static void assertValidUrl(UrlValidator validator, String url) {
assertTrue(url + " should be considered valid", validator.isValid(url);
}

关于cocoa - 用于单元测试的外部数据文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1083056/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com