1

I have the following (in C#, but the question could also apply to Java):

public interface ILibraryAdapter
{
    string Property1 { get; }
    string Method1(string param1);
    ...
}

public class ThirdPartyLibrary : ILibraryAdapter
{
    private readonly ThirdPartyClass thirdPartyClass;
    private readonly ILog log;

    public ThirdPartyLibrary(ThirdPartyClass thirdPartyClass, ILog log)
    {
        this.thirdPartyClass = thirdPartyClass;
        this.log = log;
    }

    public string Property1
    {
        get
        {
            log.Trace("ThirdPartyClass.get_Property1()");
            var result = thirdPartyClass.Property1;
            log.Trace(string.Format("ThirdPartyClass.get_Property1() returned {0}", result));
            return result;
        }
    }

    public string Method1(string param1)
    {
        log.Trace(string.Format("ThirdPartyClass.Method1({0})", param1));
        var result = thirdPartyClass.Method1(param1);
        log.Trace(string.Format("ThirdPartyClass.Method1({0}) returned {1}", param1, result));
        return result;
    }

    ...
}

where the ... represents more of properties and methods being wrapped and logged (about two dozen total).

The separate calls to the logger in each method are part of the requirements.

How should I unit test this class?

Note: The names of the properties and methods of the third-party class do not always match the names of the properties and methods of ILibraryAdapter.

4

If I were writing a test for this in Java, I would use a mocking library (like Mockito) and create a mock instance of ThirdPartyClass (and possibly the ILog instance). Then I would create an instance of ThirdPartyLibrary, passing in the mocked objects.

Once you have that, call the methods you want to test, and verify that the interaction with the mocked objects are what you expect.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.