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 действительно предназначен для собственного независимого тестового примера, и похоже, что он был разработан для того, чтобы входить в собственный исходный файл, и недоступен как своего рода компонент библиотеки, как вы, похоже, пытаетесь это сделать.
в 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()
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