The WeakReference class, monitoring memory leak and garbage collection in a Java application

Image
 Below is a Stack implementation that uses an internal resizeable array structure.  public class MyStack< T > implements Stack< T > { private static final int CAPACITY = 100 ; private Object[] array ; private int pos = 0 ; public MyStack () { this . array = new Object[ CAPACITY ] ; } @Override public void push ( T item) { if ( pos >= array . length / 2 ) { Object[] newArray = new Object[ pos * 2 ] ; System. arraycopy ( array , 0 , newArray , 0 , array . length ) ; array = newArray ; } array [ pos ++] = item ; } @Override public T pop () { if (isEmpty()) { throw new RuntimeException( "empty stack" ) ; } @SuppressWarnings ( "unchecked" ) T item = ( T ) array [ pos - 1 ] ; pos -= 1 ; return item ; } @Override @SuppressWarnings ( "unchecked" ) public T peek...

Loglama işleminin "spy appender" yoluyla test edilmesi

Loglama işlemi yapan bir sınıf, Logger nesnesini şu şekilde elde ediyor olsun:

Logger log = Logger.getLogger(FinalExceptionHandlerImpl.class.getName());

Burada loglama işleminin yapılıp yapılmadığını test edebilmek için, Logger sınıfına
bir "casus" appender enjekte ediyoruz. Sonuçta test sınıfımız aşağıdaki şekilde oluyor:

@RunWith(MockitoJUnitRunner.class)
public class FinalExceptionHandlerImplTest {
private SpyAppender spyAppender = new SpyAppender();

FinalExceptionHandlerImpl handler;

@Mock
private MessagesUIConnector messagesUIConnector;

@Before
public void setUp() throws Exception {
handler = new FinalExceptionHandlerImpl();
Logger.getLogger(FinalExceptionHandlerImpl.class.getName())
.addAppender(spyAppender);
}

@Test
public void shouldLogErrorForException() throws Exception {
Exception exception = new IndexOutOfBoundsException("message");

handler.handleException(exception, messagesUIConnector);

List messagesLogged = spyAppender.getMessagesLogged();

assertThat(messagesLogged.size(), equalTo(1));
assertThat(messagesLogged.get(0).toString(), equalTo("java.lang.IndexOutOfBoundsException: message"));
}

Spy Appender sınıfı aşağıdaki şekilde yazılabilir:

class SpyAppender extends AppenderSkeleton {
private List messages = Lists.newArrayList();

protected void append(LoggingEvent loggingEvent) {
messages.add(loggingEvent.getRenderedMessage());
}

public List getMessagesLogged() {
return messages;
}

public void close() {
}

public boolean requiresLayout() {
return false;
}
}

Böylece loglama işlemi ile ilgili birçok ayrıntıyı, SpyAppender sınıfını geliştirerek test etmemiz mümkün görünüyor.

Bahadır Konu

Comments

Popular posts from this blog

My Crappy Looking Solution to "Binary Tree Common Ancestor" Problem

A Pattern Recognition Problem: Finding Line Segments Effectively In Java

Real life TestDrivenDevelopment benefit: Tests as Documentation