Changes for page Tips and Tricks

Last modified by chrisby on 2024/04/01 13:11

From version 1.14
edited by chrisby
on 2023/05/29 17:03
Change comment: There is no comment for this version
To version 1.16
edited by chrisby
on 2023/06/03 18:20
Change comment: There is no comment for this version

Summary

Details

Page properties
Content
... ... @@ -10,7 +10,7 @@
10 10  * Use additional **simple high-level checks**. Use additional simple high-level checks. For example, when working with a collection, checking the number of elements is a good indicator of unexpected or missing elements.
11 11  * **More is better.** When in doubt, it is better to write one test too many than one test too few. Possible duplication is a lesser evil than not testing at all.
12 12  * **Keep test resources close to the tests** to make their use easy to understand. Test resources should be placed in the same location as the test if the resource is only needed by that test.
13 -* **Avoid threads**, as they are usually buggy and very difficult to test and debug properly. If threads are necessary, keep the amount of asynchronous code to a minimum. Also, separate synchronous and asynchronous logic to test them separately. Prefer thread termination conditions over fixed wait times, as this usually increases test performance dramatically.
13 +* **Avoid threads**, as concurrent programming is prone to errors, very difficult to test and debug properly. If threads are necessary, keep the amount of asynchronous code to a minimum. Also, separate synchronous and asynchronous logic to test them separately. Prefer thread termination conditions over fixed wait times, as this usually increases test performance dramatically.
14 14  * **Avoid files**
15 15  ** I/O is slow increasing the test time unnecessarily.
16 16  ** Temporary files may persist because you forgot to delete them or put them in folders where they will never be found. At the very least, be sure to delete files at the very beginning of the test to ensure their absence. Deleting files at the end of a test is prone to erros because if the test fails/aborts, those files may persist and affect subsequent tests.
... ... @@ -54,6 +54,5 @@
54 54  * **Test Case Logging**: If certain production code needs to be called several times with slightly different arguments, it may be useful to iterate over a list of these arguments, calling the production code and then asserting the result on each iteration. It is then often good practice to print out each element before each assertion. If an element causes a test to fail, the terminal output will immediately show which element caused the error.
55 55  * **Bug Coverage Responsibility**: If you find a bug or a case that has not yet been tested, it is your duty to create a test that covers it, so that the software is stable against that problem from that moment on.
56 56  * **Range-Based Assertions**: Inaccurate results should never be asserted against an exact value, but only within an expected range of approximation. This includes all floating-point numbers, which are always imprecise.
57 -* **Focus on Own Code**: Don't exclusively test third-party code, such as other services or libraries. It's not your job, and it's probably a duplication of effort. Only test if it works correctly with your own code.
58 58  * **Avoid Cascading Validation**: It would be very cumbersome to perform input validations, such as the famous null checks, and corresponding tests for each unit. A common solution is to define a module consisting of several classes. The class at the top, which receives the input for the first time, validates it once. All subsequent classes can safely assume that the input is not null when processing it, and no longer need to explicitly check or write tests for such cases.
59 59  * **Stick to Performance Requirements**: Once a performance test is passed, there is no need to optimize the performance of the code. Any effort in that direction is a waste of resources.