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

Trie Data Structure and Finding Patterns in a Collection of Words

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

A Graph Application in Java: Using WordNet to Find Outcast Words