2017-01-12 9 views
0

У меня есть структура проекта, как показано ниже:Guice свойства инъекции

enter image description here

Где моя Test1.java как это:

package TestNG; 

import org.testng.annotations.Test; 
import com.google.inject.Inject; 
import com.google.inject.name.Named; 

public class Test1 { 

@Inject 
@Named("semi-auto.firstname") 
String firstname; 

@Test 
public void test() { 
    System.out.println(firstname); 
} 

} 

и мои semi-auto.properties является

semi-auto.firstname=John 
semi-auto.lastname=Doe 

Что я хочу сделать, так это просто использовать значение параметра «firstname» в Test1 с помощью Guice. Тест проходит, но переданное значение равно null. Разве я не могу так поступить? Пожалуйста, помогите

ответ

2

Вам необходимо написать модуль для настройки guice для загрузки файла свойств (и привязки в любых других зависимых случаях).

class SemiAutoModule extends AbstractModule { 
     @Override 
     protected void configure() { 
      Properties defaults = new Properties(); 
      defaults.setProperty("semi-auto.firstname", "default firstname"); 
      try { 
       Properties properties = new Properties(defaults); 
       properties.load(ClassLoader.class.getResourceAsStream("semi-auto.properties")); 
       Names.bindProperties(binder(), props); 
      } catch (IOException e) { 
       logger.error("Could not load config: ", e); 
       System.exit(1); 
      } 
     } 
    }; 

Тогда вы должны сказать об этом TestNG:

@Guice(modules=SemiAutoModule.class) 
public class Test1 { 

    @Inject 
    @Named("semi-auto.firstname") 
    String firstname; 

    @Test 
    public void test() { 
     System.out.println(firstname); 
    } 

} 

документация для TestNG здесь: http://testng.org/doc/documentation-main.html#guice-dependency-injection.