甜rdf / rdf接口测试
检查rdf接口兼容性的测试
2.0.0
2024-02-13 11:59 UTC
Requires
- php: >=8.0
- phpunit/phpunit: ^10
- sweetrdf/rdf-helpers: ^2
- sweetrdf/rdf-interface: ^2
- zozlak/rdf-constants: ^1.1
Requires (Dev)
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)
返回正确的结果,不仅当$term
是myOwnRdf\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...) } }