A stub object is a simple fake version of a real object used in tests. It provides fixed responses to calls, helping isolate the part of the code being tested.
Click to reveal answer
beginner
Why do we use stub objects in unit tests?
We use stubs to replace complex or slow parts of the system, like databases or web services, so tests run fast and focus only on the code under test.
Click to reveal answer
intermediate
How does a stub differ from a mock object?
A stub provides preset responses but does not check how it was used. A mock also verifies if certain methods were called, adding behavior verification.
Click to reveal answer
intermediate
Example of a simple stub method in JUnit?
In JUnit, a stub can be a class that implements an interface and returns fixed values. For example, a stub for a payment service might always return success.
Click to reveal answer
beginner
What is a key benefit of using stub objects?
They help isolate the unit of code being tested by removing dependencies on external systems, making tests reliable and fast.
Click to reveal answer
What does a stub object typically do in a test?
AReturns fixed responses to method calls
BVerifies if methods were called correctly
CRuns the full real implementation
DGenerates random data for testing
✗ Incorrect
A stub returns fixed responses to simulate parts of the system during testing.
Which is NOT a reason to use stub objects?
AVerify the order of method calls
BIsolate the code under test
CAvoid using real external systems
DSpeed up tests by avoiding slow dependencies
✗ Incorrect
Verifying method call order is a job for mocks, not stubs.
In JUnit, a stub class usually:
AGenerates test reports
BExtends the test class
CRuns the real database queries
DImplements an interface with fixed return values
✗ Incorrect
A stub class implements interfaces and returns fixed values to simulate behavior.
Which statement about stub objects is true?
AThey check if methods were called correctly
BThey replace real objects with simple versions
CThey are used to test UI components
DThey slow down test execution
✗ Incorrect
Stubs replace real objects with simple versions to isolate tests.
What is the main difference between a stub and a mock?
AStubs are used only in integration tests
BMocks provide fixed responses; stubs verify interactions
CStubs provide fixed responses; mocks verify interactions
DMocks are slower than stubs
✗ Incorrect
Stubs return fixed data; mocks also check how they were used.
Explain what a stub object is and why it is useful in unit testing.
Think about replacing parts of the system that are slow or complex.
You got /4 concepts.
Describe the difference between a stub and a mock object.
One just gives answers, the other checks behavior.
You got /3 concepts.
Practice
(1/5)
1. What is the main purpose of a stub object in JUnit testing?
easy
A. To replace a real object with fixed responses for controlled testing
B. To generate random data during test execution
C. To speed up the compilation of test classes
D. To automatically fix bugs found during testing
Solution
Step 1: Understand the role of stub objects
Stub objects are used to replace real parts of a system with simple implementations that return fixed data.
Step 2: Identify the purpose in testing
This allows tests to run in isolation and control the test environment by providing predictable responses.
Final Answer:
To replace a real object with fixed responses for controlled testing -> Option A
Quick Check:
Stub objects = fixed responses for isolation [OK]
Hint: Stub = fixed answers to isolate tests quickly [OK]
Common Mistakes:
Confusing stubs with mocks or spies
Thinking stubs generate random data
Believing stubs fix bugs automatically
2. Which of the following is the correct way to create a simple stub in JUnit using an anonymous class?
easy
A. MyService service = new MyService(); service.getValue() = 5;
B. MyService service = new MyService.getValue(5);
C. MyService service = new MyService() { public int getValue() { return 5; } };
D. MyService service = new MyService() -> 5;
Solution
Step 1: Recognize Java anonymous class syntax
Creating a stub often uses an anonymous class overriding methods to return fixed values.
Step 2: Check each option's syntax
MyService service = new MyService() { public int getValue() { return 5; } }; correctly overrides getValue() to return 5. Options A, C, and D have invalid Java syntax.
Final Answer:
MyService service = new MyService() { public int getValue() { return 5; } }; -> Option C
Quick Check:
Anonymous class override = MyService service = new MyService() { public int getValue() { return 5; } }; [OK]
Hint: Anonymous class overrides method with fixed return [OK]
Common Mistakes:
Trying to assign a value directly to a method call
Using incorrect method call syntax
Confusing lambda syntax with anonymous classes
3. Given the stub below, what will be the output of testService.getValue()?
class TestService {
int getValue() { return 0; }
}
TestService testService = new TestService() {
@Override
int getValue() { return 10; }
};
System.out.println(testService.getValue());
medium
A. Runtime exception
B. 0
C. Compilation error
D. 10
Solution
Step 1: Understand method overriding in anonymous class
The anonymous class overrides getValue() to return 10 instead of 0.
Step 2: Determine output of the print statement
Calling testService.getValue() invokes the overridden method, so it returns 10.
Final Answer:
10 -> Option D
Quick Check:
Overridden method returns 10 [OK]
Hint: Overridden method in stub returns new value [OK]
Common Mistakes:
Assuming original method runs instead of overridden
Thinking anonymous class causes compile error
Expecting runtime exceptions without errors
4. Identify the error in the following stub creation code snippet:
MyService service = new MyService() {
public int getValue() {
return "five";
}
};
medium
A. Cannot override getValue method
B. Method getValue returns wrong data type
C. Missing semicolon after class definition
D. Anonymous class syntax is incorrect
Solution
Step 1: Check method return type consistency
The method getValue() is declared to return int, but returns a String "five".
Step 2: Verify syntax correctness
The anonymous class syntax and semicolon are correct; overriding is allowed.
Final Answer:
Method getValue returns wrong data type -> Option B
Quick Check:
Return type mismatch causes error [OK]
Hint: Return type must match method signature [OK]
Common Mistakes:
Ignoring return type mismatch
Assuming syntax error instead of type error
Thinking overriding is disallowed
5. You want to test a component that depends on a slow external service. Which stub implementation approach is best to speed up tests while ensuring predictable results?
hard
A. Create a stub class that returns fixed, pre-defined data instantly
B. Use the real external service but limit the number of calls
C. Mock the external service to record calls without returning data
D. Skip testing the component until the external service is faster
Solution
Step 1: Identify the problem with the real service
The external service is slow, which slows down tests and makes results unpredictable.
Step 2: Choose a stub approach for speed and predictability
Creating a stub that returns fixed data instantly allows fast, reliable tests without depending on the real service.
Step 3: Evaluate other options
Using the real service or skipping tests delays feedback; mocking without return data doesn't help test results.
Final Answer:
Create a stub class that returns fixed, pre-defined data instantly -> Option A
Quick Check:
Stub fixed data = fast, predictable tests [OK]
Hint: Stub fixed data for fast, reliable tests [OK]
Common Mistakes:
Using real slow service in tests
Confusing mocks with stubs
Skipping tests instead of isolating dependencies
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.