甜rdf/rdf接口测试

检查rdf接口兼容性的测试

2.0.0 2024-02-13 11:59 UTC

This package is auto-updated.

Last update: 2024-09-13 13:25:44 UTC


README

一组用于检查您类与rdfInterface兼容性的PHPUnit测试。

用法

我假设您正在使用composer来管理您的代码依赖。
如果不是,开始使用它绝对是个好主意。

  • sweetrdf/rdf-interface-tests声明为您的包的开发依赖
    composer require --dev sweetrdf/rdf-interface-tests:*
  • 准备您自己的继承自本包提供的类的测试类。
    • 可用的测试类位于本存储库的src/rdfInterface/tests目录。
    • 以下提供了一个示例实现。
    • 您可以为您的类添加更多测试。
  • 运行PHPUnit
    vendor/bin/phpunit --bootstrap vendor/autoload.php directoryWithYourTestClasses
    

示例实现

假设我开发了一个实现rdfInterface\NamedNode接口的myOwnRdf\MyOwnNamedNode类。

rdfInterface\NamedNode提供兼容性测试的类是\rdfInterface\tests\TermsTest。请参阅这里

\rdfInterface\tests\TermsTest类声明了两个抽象方法(通过TestBaseTrait),我必须实现它们

  • abstract public static function getDataFactory(): \rdfInterface\DataFactory 这一点很显然。测试类需要知道应该测试什么,我必须实现一个方法,使其能够访问我的rdfInterface\NamedNode接口的实现。由于rdfInterface术语(命名/空白节点、字面量、四元组、默认图)预期由实现rdfInterface\DataFactory的静态工厂类创建,因此我必须提供一个返回此类实例的方法(顺便说一句,是的,这意味着如果给定术语可以通过rdfInterface\DataFactory创建,您就不能单独实现它,而必须提供rdfInterface\DataFactory实现;至少当您希望它可测试时)。假设这里我开发了myOwnRdf\MyOwnDataFactory实现rdfInterface\DataFactory
  • abstract public static function getForeignDataFactory(): DataFactory 这一点并不那么明显。使用通用接口的重要之处在于确保不同的实现可以相互工作(互操作性),例如,确保myOwnRdf\MyOwnNamedNode::equals(rdfInterface\Term $term)返回正确的结果,不仅当$termmyOwnRdf\MyOwnNamedNode时,而且来自任何其他实现。为了检查这一点,测试类必须能够生成来自另一个实现的术语。此方法应返回此类“外部术语工厂”。
    • 如果您不想执行互操作性测试,只需将此方法实现为返回您的rdfInterface\DataFactory实现(此处为myOwnRdf\MyOwnDataFactory)即可。
    • 我决定使用simpleRdf中的simpleRdf\DataFactory(总的来说,它正是为此目的而设计的)。

了解这些之后,我可以创建一个继承自 \rdfInterface\tests\TermsTest 的测试类。只需

  • 我的测试类名称必须以 Test 结尾,这样PHPUnit才能正确识别。让我们将其命名为 myOwnRdf\MyOwnNamedNodeTest
  • \rdfInterface\tests\TermsTest 包含了大量其他类型术语的测试。我必须屏蔽它们(请参见下面的代码示例)。
  • 我还会添加一些检查我实现的一些独特功能的测试。
<?php
namespace myOwnRdf;

class MyOwnNamedNodeTest extends \rdfInterface\tests\DataFactoryTest {

    public static function getDataFactory(): \rdfInterface\DataFactory {
        return new MyDataFactoryClass();
    }

    public static function getForeignDataFactory(): \rdfInterface\DataFactory {
        return new \simpleRdf\DataFactory();
    }

    // override unwanted \rdfInterface\tests\DataFactoryTest methods
    public function testBlankNode(): void {
        $this->assertTrue(true);
    }
    public function testLiteralFactory(): void {
        $this->assertTrue(true);
    }
    (...etc., there is a lot of methods to skip in this scenario...)

    // provide my own test

    public function testMyFeature(): void {
       (...perform some tests...)
    }
}

您可以在simpleRdf 库的测试和 quickRdf 库的测试中找到更多重用此包提供的测试的详尽示例。