Kotlin Language Features Related to Null Handling

Any software engineer with a Java background would find the null handling features in the Kotlin language interesting. Let's summarize this topic with some examples. Nullable types: In Kotlin, types are non-nullable by default. If you want a variable to be able to hold a null value, you need to explicitly declare its type as nullable using the Type? syntax. For example, String? denotes a nullable string, while String represents a non-nullable string. Safe calls (?.): Kotlin introduces the safe call operator (?.) for handling nullable types. It allows you to safely invoke a method or access a property on a nullable object. If the object is null, the expression returns null instead of throwing a NullPointerException. Example: data class Person(val name: String, val age: Int, val address: String?) fun main() {     // Create a person with a nullable address     val person1 = Person("John Doe", 25, "123 Main Street")     val person2 = Person("Jane Doe", 30,...

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

Virtual Memory

NOTES ON COMPUTER ARCHITECTURE: Some important concepts in computer architecture