Posts

Showing posts with the label java

The secret world of testing without mocking: domain-driven design, fakes, and other patterns to simplify testing in a microservice architecture

Image
Much has been said about mocks, the controversial, Swiss army knife of test doubles: Don't use them too much (source) (source) Know when to use them at all (source) Don't use them to test implementation detail (source) Don't mock types you don't own (source) Only mock classes when dealing with legacy code (source) Don't mock complex interfaces (source) (source) ...the list goes on. For a tool so easy to misuse, we're using it quite a lot. Mockito is one of the most depended-upon Java libraries in the world . While "mocking" is an abstract concept, for the remainder of this post I'll use the term mock to refer specifically to a mock or stub configured by way of a mocking library like Mockito. Likewise, when I refer to Mockito, I really mean any mocking library; Mockito just stands out because it has a welcoming API and is–no doubt as a consequence–measurably very popular. I was there too once, a frequent Mockito user, perhaps ...

A Case Study of Java's Dynamic Proxies (and other Reflection Bits): Selenium's PageFactory

Foreward I spend a lot of time studying the source code of libraries that I really enjoy using. Since my day job is developing automated web UI tests at Red Hat, Selenium is one of those libraries. At the time I started writing this, I was not very familiar with Java’s reflection capabilities, nor what the heck a “Dynamic Proxy” was. The Proxy pattern is particularly powerful, and java.lang.reflect ’s dynamic proxies provide a fairly nice way to do it. Dissecting PageFactory demonstrates. Foreward What is PageFactory? Charlie and the Page Factory A Factory in Chicago that Makes Miniature Models… of Factories 1. Instance an ElementLocatorFactory by giving it a SearchContext 2. Instance a FieldDecorator by giving it the ElementLocatorFactory 3. Use the FieldDecorator to assign references to the page object’s WebElement fields Summary What is PageFactory? Selenium WebDriver comes with a fancy class called PageFactory . It allows you to write your page object’s lik...