Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8876349
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 14, 20262026-06-14T19:11:40+00:00 2026-06-14T19:11:40+00:00

I have a code which interacts with some object and then should call finish()

  • 0

I have a code which interacts with some object and then should call finish() method on it.

void completeTransaction(PaymentTransaction transaction) {  
    recordTransaction(transaction.getId());

    transaction.finish();
}

PaymentTransaction is some third-party class which behaviour after finish() is undefined — it may throw an exception or just fail silently.

I need to write a unit test which passes then and only then:

  1. recordTransaction(transaction.getId()) called
  2. transaction.finish() called
  3. transaction.finish() called after recordTransaction(transaction.getId())

Test satisfying the above conditions should prohibit code like this:

void completeTransaction(PaymentTransaction transaction) {
   transaction.finish();
   recordTransaction(transaction.getId()); //oops
}

Test case for the first condition:

void testCompleteTransaction_TransactionRecorded() {
    completeTransaction(transactionMock);
    // assert that recordTransaction(transaction.getId()) 
    // called with correct argument

completeTransaction(PaymentTransaction transaction)
}
For the second one:

void testCompleteTransaction_TransactionCompleted() {
    completeTransaction(transactionMock);
    // assert that transaction.finish() called
}

I wonder how can I enforce the 3rd condition via test case.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-14T19:11:41+00:00Added an answer on June 14, 2026 at 7:11 pm

    You could pass in a fake PaymentTransaction that overrides finish() and getId() such that finish() throws an exception if some internal flag isn’t set when getId() is called.

    public class FakePaymentTransaction {
        private bool _getIdWasCalled = false;
    
        public override void finish () {
            if (!_getIdWasCalled) {
                throw new Exception ("getId wasn't called first!");
            }
        }
    
        public override /* your return type */ getId() {
            _getIdWasCalled = true;
            // Some other logic to return your specified return type
        }
    }
    

    Now when you pass it into your SUT, you will see if the calls were made in the right order.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I have a Java application which interacts with native code using JNI. The native
I have a Game class that has a -(void) play method which will be
I have some .NET remoting code where a factory method, implemented in some server
I have code which has a drop down list. And when a certain option
I have code which needs to do something like this There is a list
I have code which looks like: private static DirectiveNode CreateInstance(Type nodeType, DirectiveInfo info) {
I have code which as been working against an older Active Directory server and
I have code which performs query on Jboss server. It has JNDI based datasource
I have code which works in all sorts of different situations, including when copying
I already have code which lazy loads scripts on request. My issue now is

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.