私は次のようなサービスをテストしようとしています:
import org.springframework.core.env.Environment;
@Service
public class MyService {
@Autowired Environment env;
...
...
}
環境インターフェースをモックする方法、または環境インターフェースを作成する方法を教えてください。
Mockitoを使用すると、以下のコードのように実行できるはずです。実行時にEnvironmentフィールドを設定できるように、アクセサーを提供する必要があることに注意してください。または、自動配線されたフィールドが2つしかない場合は、環境を挿入できるコンストラクターを定義する方が簡単です。
import static org.mockito.Mockito.when;
import static org.mockito.MockitoAnnotations.initMocks;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
public class MyServicetest {
// Define the Environment as a Mockito mock object
@Mock Environment env;
MyService myService;
@Before
public void init() {
// Boilerplate for initialising mocks
initMocks();
// Define how your mock object should behave
when(this.env.getProperty("MyProp")).thenReturn("MyValue");
// Initialise your service
myService = new MyServiceImpl();
// Ensure that your service uses your mock environment
myService.setEnvironment(this.env);
}
@Test
public void shouldDoSomething() {
// your test
}
}
実装クラスには@AutowiredEnvironmentenvがあります。したがって、> JUnitテストケースを実行している場合、実装クラスには次のようなコンストラクターが必要です。
public class SampleImpl{
@Autowired
Environment env
public SampleImpl(Environment envObj){
this.env = envObj}
}
jUnitテストクラスは次のようになります。
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
import static org.mockito.MockitoAnnotations.initMocks;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.springframework.core.env.Environment;
import static org.mockito.Mockito.when;
public class SampleTest {
@Mock Environment env;
@Before
public void init(){
env = mock(Environment.class);
when(env.getProperty("file.location"))
.thenReturn("C:\\file\\");
}
@Test
public void testCall()throws Exception{
SampleImpl obj = new SampleImpl(env);
obj.yourBusinessMethods();
}
}
お役に立てれば。スティーブに感謝します。
Springベースのテストでは、次のものを使用できます。_@ActiveProfiles
_プロファイルをアクティブ化する(ただし、これはモックではありません)
_@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("test.xml")
@ActiveProfiles("myProfile")
public class ProfileTest {
@Autowired
MyService myService
@Test
public void demo() {
assertTrue(myService.env.acceptsProfiles("myProfile"));
}
}
_
しかし、私はあなたがモックを必要とし、それからあなた自身を書くか、モックフレームワーク(MokitoまたはJMock)を使用します。 Environment
にはサブラスAbstractEnvironment
があり、customizePropertySources(MutablePropertySources propertySources)
メソッドをオーバーライドする必要があります
_@Override
protected void customizePropertySources(MutablePropertySources propertySources) {
Properties properties = ....
propertySources.addLast(new MockPropertySource(properties));
}
_