Annotations

2020. 5. 11. 08:53모바일/Android_Test

@Before

  • @Test를 시작하기 전 사전에 진행해야 할 사전 정의에 해당됩니다. @Test가 시작되기 전 항상 호출되게 됩니다.(단위 테스트 포함)

@After

  • @After은 모든 테스트가 종료되면 호출되게 됩니다. 메모리에서 resource를 release 할 수 있습니다.

@Test

  • @Before가 완료되면 실제 코드 테스트를 진행하게 됩니다.

@Rule

  • 해당 Test class에서 사용하게 될 ActivityTestRule과 ServiceTestRule에 대하여 정의하게 됩니다.

@BeforeClass, @AfterClass

  • public static method로 정의하여야 하며, @Before, @After와 동일하게 한 번씩만 실행되게 됩니다.

@Test(timeout=)

  • @Test 룰에 대한 timeout을 지정하게 됩니다. timeout 안에 테스트가 완료되지 않으면 fail이 되며, time은 milliseconds으로만 사용할 수 있습니다. 예) @Test(timeout=500)

@RequiresDevice

  • 에뮬레이터를 사용하지 않고 기기만 사용할 수 있습니다.

@SdkSupress

  • minSdkVersion을 지정할 수 있습니다.

@SmallTest, @MediumTest, @LargeTest

  • 테스트 성격을 구분하여 테스트할 수 있습니다.

@BindsOptionalOf

  • Optional 컨테이너에 들어갈 value에 대한 바인딩을 선언하는 애노테이션입니다. 만약 Module내에 다음과 같이 메소드가 선언되어있다고 가정해 보겠습니다.

  • @BindsOptionalOf abstract Foo optionalFoo();컴포넌트 내에 있는 어떠한 객체든 이 Foo와 바인딩 될 만한 객체가 있다면 바인딩되게 됩니다. 만약 바인딩이 된다면 Optional에 의존성 주입시 컨테이너의 상태가 Present(객체있음) 상태가 되고, 그렇지 않다면Absent(비어있음) 상태가 됩니다.

  • @BindsOptionalOf 메소드는 다음과 같은 조건을 충족해야 사용가능합니다.

  • 반드시 abstract여야 함. qualifier 애노테이션을 가질수 있음 void를 반환할 수 없음 파라미터를 가질 수 없음 예외처리 불가 @Inject가 붙은 생성자에 qualifier가 지정되지 않은 타입을 반환할 수 없음 구체적으로 아래의 경우들에 대해 인젝션이 가능하게 됩니다.

    • Optional
    • Optional<Provider>
    • Optional<Lazy>
    • Optional<Provider<Lazy>>
    • 만약 Foo와 바인딩되는것에 @Nullable애노테이션이 있다면, 컴파일시간에 에러가 발생하게 됩니다. 왜냐하면 Optional 컨테이너는 null을 포함할 수 없기 때문입니다. 컨테이너에 Provider나 Lazy의 다른 형태로 주입하여 null이 들어가는 것을 방지하고, 필요시 get()메소드를 통해 객체 또는 null을 얻을수 있습니다.