Les tests de printemps bean avec poste de construire
J'ai un haricot similaire à ceci:
@Service
public class A {
@Autowired
private B b;
@PostConstruct
public void setup() {
b.call(param);
}
}
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = { Application.class, Config.class })
@WebIntegrationTest(randomPort = true)
public class Test {
@Autowired
B B;
@Before
public void setUp() throws Exception {
when(b.call(any())).thenReturn("smth");
}
@Test
public void test() throws Exception {
//test...
}
}
Le problème est que PostConstruct
est appelé avant setUp
quand le test est exécuté.
De classe A ont une autre logique qui est appelé le test de ce dernier. Et pour répondre à votre question, je voudrais tester la logique de la classe A.
OriginalL'auteur Andy | 2015-07-23
Vous devez vous connecter pour publier un commentaire.
Si vous voulez écrire un unité test de
A
, alors n'utilisez pas le Printemps. Au lieu de cela, instancierA
vous-même et passer un stub/se moquer deB
(soit en utilisant le constructeur de l'injection ou deReflectionTestUtils
pour définir le domaine privé).Par exemple:
-
Si vous devez utiliser le Printemps, parce que vous voulez écrire une intégration de test, utiliser un autre contexte de l'application, où vous remplacez
B
avec un talon de/se moquer.Par exemple, en supposant que
B
est instancié dans unProduction
classe comme ceci:Écrire un autre
@Configuration
classe pour vos tests:De référence dans votre test avec la
@SpringApplicationConfiguration
annotation:@Configuration public class Tests { @Bean public B b() { B b = Mockito.mock(B.class); Mockito.when(b).thenReturn("smth"); return b; } }
cette 1ère partie de la solution est d'éviter le vrai problème en tuant les “intégration” de la partie de l'épreuve. La 2ème partie est beaucoup mieux
C'est pourquoi j'ai commencé avec des "Si vous voulez écrire un unité de test". Dans mon expérience, les gens ont souvent tendance à écrire des test d'intégration quand ils veulent vraiment un test unitaire.
J'ai mis à jour ma réponse en fonction de votre commentaire.
OriginalL'auteur hzpz