Property-based testing checks that a program works correctly for many inputs by testing general rules (properties) instead of specific examples.
Click to reveal answer
beginner
How does property-based testing differ from example-based testing?
Example-based testing uses fixed inputs and expected outputs, while property-based testing generates many random inputs to check if general properties always hold.
Click to reveal answer
intermediate
In Kotlin, which library is commonly used for property-based testing?
The Kotest library supports property-based testing with easy syntax to define properties and generate test data.
Click to reveal answer
beginner
What is a 'property' in property-based testing?
A property is a rule or condition that should always be true for all valid inputs of the program.
Click to reveal answer
beginner
Why is property-based testing useful?
It finds edge cases and bugs that example tests might miss by testing many random inputs automatically.
Click to reveal answer
What does property-based testing focus on?
ATesting only one fixed input
BTesting general rules for many inputs
CTesting user interface layout
DTesting database connections
✗ Incorrect
Property-based testing checks if general properties hold true for many inputs.
Which Kotlin library supports property-based testing?
AKotest
BJUnit
CMockito
DSpring Boot
✗ Incorrect
Kotest provides built-in support for property-based testing in Kotlin.
What is a key benefit of property-based testing?
ARuns tests faster than unit tests
BReplaces all manual testing
CFinds bugs with many random inputs
DOnly tests user interface
✗ Incorrect
Property-based testing finds bugs by checking many random inputs automatically.
In property-based testing, what is a 'property'?
AA rule that should always be true
BA fixed input value
CA test case name
DA bug report
✗ Incorrect
A property is a rule or condition that must hold for all inputs.
How does property-based testing generate inputs?
AFrom a database
BManually by the tester
CFrom user input only
DRandomly, based on generators
✗ Incorrect
Property-based testing uses generators to create many random inputs automatically.
Explain property-based testing and how it helps find bugs.
Think about testing rules instead of fixed examples.
You got /4 concepts.
Describe how you would write a simple property-based test in Kotlin.
Focus on the steps to create a property test.
You got /4 concepts.
Practice
(1/5)
1.
What is the main idea behind property-based testing in Kotlin?
easy
A. Writing tests only for fixed input values
B. Manually verifying outputs for each test case
C. Checking if the code compiles without errors
D. Testing that a property or rule holds true for many random inputs
Solution
Step 1: Understand property-based testing concept
Property-based testing means checking if a rule or property is true for many inputs, not just a few fixed ones.
Step 2: Compare options with concept
Only Testing that a property or rule holds true for many random inputs describes testing many random inputs against a property, which matches the concept.
Final Answer:
Testing that a property or rule holds true for many random inputs -> Option D
Quick Check:
Property-based testing = many inputs tested [OK]
Hint: Look for 'many inputs' and 'rules' in the answer [OK]
Common Mistakes:
Confusing property-based testing with example-based testing
Thinking it only tests fixed inputs
Assuming it checks compilation only
2.
Which Kotlin library is commonly used for property-based testing?
easy
A. JUnit
B. Mockito
C. Kotest
D. Retrofit
Solution
Step 1: Identify Kotlin testing libraries
JUnit is for unit testing, Mockito for mocking, Retrofit for networking, Kotest supports property-based testing.
Step 2: Match library to property-based testing
Kotest provides generators and property testing features, making it the correct choice.
Final Answer:
Kotest -> Option C
Quick Check:
Kotest = property-based testing library [OK]
Hint: Remember Kotest for property-based tests in Kotlin [OK]
Common Mistakes:
Confusing JUnit with property-based testing support
Choosing Mockito which is for mocking
Selecting Retrofit which is unrelated
3.
Consider this Kotlin property-based test snippet using Kotest:
import io.kotest.property.checkAll
fun isSorted(list: List<Int>): Boolean = list.zipWithNext().all { it.first <= it.second }
checkAll { list ->
assert(isSorted(list.sorted()))
}
What will this test do?
medium
A. Check that the list contains only positive numbers
B. Check that sorting any list results in a sorted list
C. Check that the list is empty
D. Check that any list is already sorted
Solution
Step 1: Understand the test code
The test generates many random lists of integers. For each list, it sorts the list and checks if the sorted list is sorted using isSorted.
Step 2: Interpret the assertion
The assertion verifies that sorting produces a sorted list, which is a property that should always hold.
Final Answer:
Check that sorting any list results in a sorted list -> Option B
Quick Check:
Sorting list => sorted list [OK]
Hint: Look for sorting and isSorted check in the code [OK]
Common Mistakes:
Thinking it checks if original list is sorted
Assuming it checks list emptiness
Confusing list contents with positivity
4.
What is wrong with this Kotlin property-based test using Kotest?
checkAll<Int> { n ->
assert(n > 0)
}
Choose the best explanation.
medium
A. It will fail because it tests all Ints, including zero and negatives
B. It will pass because all Ints are positive
C. It has a syntax error in the lambda
D. It only tests positive numbers, so it's correct
Solution
Step 1: Analyze the test input range
The test uses checkAll<Int> which generates all Int values, including negatives and zero.
Step 2: Understand the assertion
The assertion assert(n > 0) expects all numbers to be positive, which is false for many generated values.
Final Answer:
It will fail because it tests all Ints, including zero and negatives -> Option A
Quick Check:
All Ints include negatives, so assert fails [OK]
Hint: Remember Int includes negatives and zero [OK]
Common Mistakes:
Assuming all Ints are positive
Thinking lambda syntax is wrong
Believing test only runs on positive numbers
5.
You want to test a function reverseTwice(list: List<Int>): List<Int> that reverses a list twice. Which property-based test best checks that reverseTwice returns the original list?
fun reverseTwice(list: List<Int>): List<Int> = list.reversed().reversed()
hard
A. checkAll { list -> assert(reverseTwice(list) == list) }
B. checkAll { list -> assert(reverseTwice(list) == list.reversed()) }
C. checkAll { list -> assert(reverseTwice(list).isEmpty()) }
D. checkAll { list -> assert(reverseTwice(list).size == 0) }
Solution
Step 1: Understand the function behavior
Reversing a list twice should return the original list unchanged.
Step 2: Match the property test to the behavior
checkAll { list -> assert(reverseTwice(list) == list) } asserts that reverseTwice(list) equals the original list, which correctly tests the property.
Final Answer:
checkAll<List<Int>> { list -> assert(reverseTwice(list) == list) } -> Option A
Quick Check:
Reverse twice = original list [OK]
Hint: Check if test compares to original list [OK]
Common Mistakes:
Comparing to reversed list instead of original
Checking if result is empty incorrectly
Testing size equals zero wrongly
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.