invalid_use_of_visible_for_testing_member — 테스트 전용 멤버를 다른 곳에서 사용

invalid_use_of_visible_for_testing_member — 테스트 전용 멤버를 다른 곳에서 사용

@visibleForTesting로 표시된 멤버를, 선언된 라이브러리 밖이면서 test 디렉토리에 있지 않은 곳에서 참조하면 나타나는 진단이에요. 테스트 전용 멤버를 어디서 쓸 수 있는지, 어떻게 고치는지 설명해 드릴게요.

출처: invalid_use_of_visible_for_testing_member

본문

분석기는 @visibleForTesting 어노테이션이 달린 멤버를, 선언된 라이브러리도 아니고 test 디렉토리에 있는 라이브러리도 아닌 곳에서 참조할 때 이 진단을 내보내요.

즉, 이 멤버는 두 곳에서만 쓸 수 있어요. 하나는 정의된 라이브러리, 다른 하나는 test 디렉토리 안의 코드예요.

예시

먼저 c.dart 파일에 아래 내용이 있다고 해볼게요.

import 'package:meta/meta.dart';

class C {
  @visibleForTesting
  void m() {}
}

아래 코드가 test 디렉토리 에 있을 때 진단이 나타나요. 메서드 m이 테스트에서만 보이도록 표시돼 있기 때문이에요.

import 'c.dart';

void f(C c) {
  c.m();
}

흔한 해결 방법

만약 이 멤버가 테스트 밖에서는 절대 참조되면 안 된다면, 참조를 제거하면 돼요.

import 'c.dart';

void f(C c) {}

반대로, 이 멤버를 테스트 밖에서 참조해도 괜찮다면 어노테이션을 제거해 주면 돼요. 그러면 일반 public 멤버가 돼서 어디서든 쓸 수 있게 돼요.

class C {
  void m() {}
}

더 알아보기

  • visibleForTesting 어노테이션의 정의는 package:meta 문서를 참고하세요.
  • Dart에서 테스트를 구성하는 방법(test 디렉토리 구조 등)은 Dart 테스트 문서를 확인해 보세요.