son sınıfına sahipse, InjectMocks nasıl kullanılır? Bazı hizmetleri mockito ile test etmek istiyorum. Servisler CDI'ya dayanıyor ve maalesef değişemediğim tarla enjeksiyonu kullanıyorlar.Enjekte edilecek örneğin
public class Service {
@Inject Logger logger;
public void method() {
logger.info("some log text");
}
}
Şimdi Mockito en @InjectMocks
ek açıklamasıyla test edilebilir örneklerini oluşturmak için oldukça kolaydır. Ya alay ve casuslar enjekte edecek.
@RunWith(MockitoJUnitRunner.class)
public class ServiceTest {
@Spy Logger logger = LoggerFactory.getLogger(Service.class);
@InjectMocks Service service;
@Test public void test() {
// Given
// When
service.method();
// Then
}
Servis sınamamda test edilen bazı çalışma günlüğüne ihtiyacım var. Logger çerçevesi slf4j'dir, tercih edilen logger logback'dir. Ancak maalesef, logback'in Logger
uygulaması son halini alıyor, bundan dolayı casusluk yapamıyorum, bir çalışma zamanı istisnasıyla sonuçlanıyor. Aklıma gelen
Geçici Çözümler:
- kullanım yansıma (non-son) logger sarıcı hizmeti logger niteliğini (kötü adamın enjeksiyon)
- bir spyable uygulamak başlatmak için buna delegeler son günlüğe kaydetme günlüğü günlüğü
Ancak bu sorun (lar) için temiz veya en azından daha iyi bir çözüm var mı?
Test altyapınıza [Kaynak SE] (http://docs.jboss.org/weld/reference/latest/en-US/html_single/#d0e5727) eklemeyi düşündünüz mü? –
@SteveC - yes. Ama gerçek CDI enjekte eden alaylarla gerçekten çok fena (Ben proje üzerinde guice özledim). Moralsiz entegrasyon testleri için arquillian kullanıyorum. Buna eklemek için –