You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: tck/README.md
+15-4
Original file line number
Diff line number
Diff line change
@@ -241,18 +241,29 @@ Note that explicitly passed in values take precedence over values provided by th
241
241
242
242
Subscriber rules Verification is split up into two files (styles) of tests.
243
243
244
-
The Blackbox Verification tests do not require the implementation under test to be modified at all, yet they are *not* able to verify most rules. In Whitebox Verification, more control over `request()` calls etc. is required in order to validate rules more precisely.
244
+
The Blackbox Verification tests do not require the implementation under test to be modified at all, yet they are *not* able
245
+
to verify most rules. In Whitebox Verification, more control over `request()` calls etc. is required in order to validate rules more precisely.
246
+
247
+
It is highly recommended to implement the `SubscriberWhiteboxVerification<T>` instead of the blackbox one even if it is
248
+
more work to do so, as it can test far more corner cases in implementations that would otherwise be left untested
249
+
(if only blackbox tests would be used).
245
250
246
251
### createElement and Helper Publisher implementations
247
252
Since testing a `Subscriber` is not possible without a corresponding `Publisher` the TCK Subscriber Verifications
248
253
both provide a default "*helper publisher*" to drive its test and also alow to replace this Publisher with a custom implementation.
249
254
The helper publisher is an asynchronous publisher by default - meaning that your subscriber can not blindly assume single threaded execution.
250
255
256
+
When extending subscriber verification classes a type parameter representing the element type passed through the stream must be given.
257
+
Implementations usually should not be sensitive to the type of element being signalled, but sometimes a Subscriber may be limited to only be able to work within a known set of types -
258
+
like a `FileSubscriber extends Subscriber<String>` for example, that writes each element it receives as new line into a file.
259
+
For element type agnostic Subscribers it is the simplest to parameterize the tests using `Integer` and in the `createElement(int idx)` method (explained below in futher detail), return the incoming `int`.
260
+
In case an implementation needs to work on a specific type, the verification class should be parameterized using that type (e.g. `class StringSubTest extends SubscriberWhiteboxVerification<String>`) and a `String` must be returned from the `createElement` method.
261
+
251
262
While the `Publisher` implementation is provided, creating the signal elements is not – this is because a given Subscriber
252
263
may for example only work with `HashedMessage` or some other specific kind of signal. The TCK is unable to generate such
253
264
special messages automatically, so we provide the `T createElement(Integer id)` method to be implemented as part of
254
265
Subscriber Verifications which should take the given ID and return an element of type `T` (where `T` is the type of
255
-
elements flowing into the `Subscriber<T>`, as known thanks to `... extends WhiteboxSubscriberVerification<T>`) representing
266
+
elements flowing into the `Subscriber<T>`, as known thanks to `... extends SubscriberWhiteboxVerification<T>`) representing
256
267
an element of the stream that will be passed on to the Subscriber.
257
268
258
269
The simplest valid implemenation is to return the incoming `id`*as the element* in a verification using `Integer`s as element types:
@@ -268,8 +279,8 @@ public class MySubscriberTest extends SubscriberBlackboxVerification<Integer> {
268
279
```
269
280
270
281
271
-
The `createElement` method MAY be called from multiple
272
-
threads, so in case of more complicated implementations, please be aware of this fact.
282
+
The `createElement` method MAY be called concurrently from multiple threads,
283
+
so in case of more complicated implementations, please be aware of this fact.
273
284
274
285
**Very Advanced**: While we do not expect many implementations having to do so, it is possible to take full control of the `Publisher`
275
286
which will be driving the TCKs test. This can be achieved by implementing the `createHelperPublisher` method in which you can implement your
0 commit comments