Модульные тесты на Java (Mockito), которые выполняются как в Windows, так и в Linux

#java #linux #windows #mockito

#java #linux #Windows #mockito

Вопрос:

У меня есть Java-проект, который будет выполняться как в Windows, так и в Linux. В нем есть оболочки для специфичных для Windows вызовов ОС и для Linux ether. Как я могу написать модульные тесты, которые будут выполняться на каждой платформе без проблем? Я пытался имитировать конкретные вызовы ОС, но я получил следующую ошибку:

 NTFSHandlerUnitTest > impersonateTest() FAILED
    java.lang.UnsatisfiedLinkError: Unable to load library 'Advapi32': Native library (linux-x86-64/libAdvapi32.so) not found in resource path 
  

Мой тест:

 @InjectMocks
WinFSHandler handler;

@Mock
WindowsAuthProviderImpl provider;

@Mock
Advapi32Util.Privilege privilege;

@Mock
ConfigClientProperties.Credentials cred;

@BeforeEach
public void initMocks() {
    MockitoAnnotations.initMocks(this);
}

@Test
void impersonateTest() {

    IWindowsIdentity identity = mock(IWindowsIdentity.class);
    when(provider.logonDomainUserEx(any(), any(), any(), anyInt(), anyInt() ))
            .thenReturn(identity);
    when(privilege.enable()).thenReturn(null);

    boolean result = handler.Impersonate();

    assertTrue(result);
}
  

Комментарии:

1. Добавьте профиль Windows и профиль Linux для своих тестов… и разделите тесты

2. Но когда я буду запускать тестовое покрытие, специфичный для этой ОС код будет считаться непокрытым.