Есть ли способ использовать java.lang.System для внедрения зависимостей?
В настоящее время я создаю свои классы
public class MyClass
{
private final Dependency iDependency;
public MyClass(Dependency pDependency)
{
this.iDependency = pDependeny;
}
public static MyClass createInstance()
{
final Dependency tDependency = Dependency.createInstance();
final MyClass tInstance = new MyClass(tDependency);
return tInstance;
}
// ... class methods ...
}
и создаю их с помощью:
MyClass tMyClass = MyClass.createInstance();
и для теста я использую:
@Test
public void testMethod()
{
// Setup
Dependency tTestDependency = new TestDependency();
MyClass tMyClass = new MyClass(tTestDependency);
// Test
tMyClass.method();
}
Теперь у меня проблема с тем, что у меня есть java.lang.System в качестве зависимости, поскольку я хочу написать консольный логгер.У меня нет проблем с установкой System как Datatyp для зависимости, однако Eclipse говорит «нет», когда я хочу установить System в качестве параметра.Я получаю сообщение об ошибке «Система не может быть преобразована в переменную».
public class ConsoleLogger
{
private final System iSystem; // works
public MyClass(System pSystem) // works
{
this.iSystem = pSystem;
}
public static ConsoleLogger createInstance()
{
final ConsoleLogger tInstance = new ConsoleLogger(System); // Here I get an error: System cannot be resolved to a variable
return tInstance;
}
public void logInfo(String pMessage)
{
final String tPrintMsg = this.iSystem.currentTimeMillis() + " INFO - " + pMessage;
this.iSystem.out.println(tPrintMsg);
}
}
Я могу установить System.err и System.out как зависимости с типом данных PrintStream, но System.currentTimeMillies () все равно не будет охвачен.
Кто-нибудь знает, как обращаться с Системой как с зависимостью в этом сценарии?