Получите имя пользователя входа в систему в Java

TEST_P - это макрос, который при раскрытии объявляет полный класс c ++, к которому INSTANTIATE_TEST_CASE_P добавляет функциональность.

Поскольку ваш TEST_P находится в отдельном файле .cc, ваш вызов INSTANTIATE_TEST_CASE_P (который находится в своем собственном файле .cc) не может его увидеть, поэтому он по сути определяет функцию без класса-владельца.

С другой стороны, класс, определенный в TEST_P, не оснащен методами, которые INSTANTIATE_TEST_CASE_P определил бы для него. Так что он не находит никаких тестовых экземпляров для запуска.

Вам нужно переместить декларацию TEST_P туда, где ваш вызов INSTANTIATE_TEST_CASE_P может увидеть ее, чтобы она работала.

Однако, предостережение - TEST_P не только объявляет класс, но и определяет несколько функций. Поэтому, если вы попытаетесь поместить его в файл заголовка, вы можете получить некоторые ошибки компоновщика, относящиеся к этим методам класса (как уже определено, например). Так что лучшее место для этого может быть рядом с вызовом INSTANTIATE_TEST_CASE_P.

TEST_P действительно предназначен для собственного независимого тестового примера, и похоже, что он был разработан для того, чтобы входить в собственный исходный файл, и недоступен как своего рода компонент библиотеки, как вы, похоже, пытаетесь это сделать.

83
задан wattostudios 1 May 2012 в 04:51
поделиться

3 ответа

System.getProperty("user.name")
204
ответ дан 24 November 2019 в 08:41
поделиться

в Unix:

new com.sun.security.auth.module.UnixSystem().getUsername()

в Windows:

new com.sun.security.auth.module.NTSystem().getName()

в Solaris:

new com.sun.security.auth.module.SolarisSystem().getUsername()
29
ответ дан 24 November 2019 в 08:41
поделиться

System.getProperty("user.name") не является хорошим вариантом безопасности, поскольку эта переменная окружения может быть подделана: C:\ set USERNAME="Joe Doe" java ... // даст вам System.getProperty("user.name"). Вы должны сделать:

com.sun.security.auth.module.NTSystem NTSystem = new com.sun.security.auth.module.NTSystem();
System.out.println(NTSystem.getName());

JDK 1.5 и выше.

Я использую его в апплете, и он должен быть подписан. info source

15
ответ дан 24 November 2019 в 08:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: