Software Develop/C# , .NET , WPF

private, protected method 단위 테스트 코드 작성하기

jaywapp 2023. 2. 7. 17:50

프로젝트를 진행할 때, 필수적으로 해야하는 것들 중에 하나가 바로 테스트 코드가 아닐까 싶다.

개발된 메서드마다 해당 메서드가 정상적으로 동작하는지 여러 가지 케이스를 통해 함수의 신뢰성을 보장할 수 있다.

메서드 접근 지정자

우리는 메서드를 개발할 때 접근 지정자를 항상 지정한다. (public, protected, private)

public일 경우에는 단위 테스트 코드를 작성하는 것에 아무런 문제가 없지만,

protected나 private의 경우에는 테스트 객체에서 메서드에 대한 접근이 불가능하기 때문에 한계가 발생한다.

우회 방법

보통 접근이 어려운 메서드에 대한 테스트 코드를 작성하기 위해서 다양한 우회 방법이 있다.

그 중 몇 가지를 소개하고자 한다. 

 

지금부터 나오는 테스트 코드 예제는 아래 객체에 대한 테스트 코드 작성 방법이다.

public class Writer
{
    private string WritePrivate() =>  "private";

    private string WritePrivate(string text) =>  $"private {text}";
}

 

PrivateObject 사용

MS에서는 테스트 코드를 위한 툴킷을 제공한다. 그 중에서는 PrivateObject라는 도구가 있다.

PrivateObject를 사용하면 함수명을 통해 private 메서드에 접근할 수 있다.

 

Reflection 사용

Reflection을 사용하여 private 메서드에 접근할 수 있다. 다만 메서드를 추출함에 있어서 다소 번거로운 처리가 필요할 수 있다. 만약에 오버로드를 사용하여 같은 이름의 메서드가 다양하게 존재한다면 테스트하고자 하는 메서드를 찾아내기가 조금 번거로울 것 같다.

단위 테스트에 대하여

난 단위 테스트는 꼭 필요하다고 생각한다. 그 대상이 private, protected라도 말이다.

하지만 그 동안의 나의 개발 과정을 보면 마감일에 쫒기고 일정에 치이면서 테스트 코드 작성을 소홀히 하곤 했다.

"private, protected 메서드는 접근이 어려우니 작성하지 않아도 되겠지."라는 안일한 생각을 했던 것 같다. 

 

아주 간단하게 모든 메서드에 대한 접근이 가능하다는 걸 알게 되었고, 이번 블로깅을 계기로 앞으로의 개발에서 단위 테스트를 빼먹지 말고 꼭 작성해야겠다라는 생각이 든다.

'Software Develop > C# , .NET , WPF' 카테고리의 다른 글

ListBox 사용하기  (0) 2023.02.07
Adonis UI 사용기  (0) 2023.02.07
Lazy<T>  (0) 2023.01.16
ReactiveUI  (0) 2022.02.28
Crawling (Selenium)  (0) 2022.02.16