Je suis un fan des méthodes statiques dans Java pour, par exemple, dans Util-classes. Mais parmi certains collègues, j'ai rencontré certains arguments selon lesquels une méthode statique ne devrait jamais utiliser de ressources externes. Mais personne ne pourrait expliquer pourquoi cela devrait être mauvais ou même dangereux. La seule raison que j'ai trouvée est qu'il peut être difficile de se moquer de cette ressource externe pendant le test. Mais est-ce vraiment la seule raison?Pourquoi ne pas utiliser des méthodes statiques pour les ressources externes?
Ci-dessous, j'ai un exemple de méthode statique. J'aimerais comprendre pourquoi il devrait être une mauvaise approche pour l'utiliser avec statique.
public class JmsUtil {
public static String sendBytesMessage(byte[] messageBytes) throws JMSException, NamingException {
String jmsMessageID = null;
Connection connection = null;
try {
Context context = new InitialContext();
ConnectionFactory connectionFactory = (ConnectionFactory) context.lookup("ourfactory");
Queue queue = (Queue) context.lookup("ourqueue");
connection = connectionFactory.createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageProducer messageProducer = session.createProducer(queue);
BytesMessage bytesMessage = session.createBytesMessage();
bytesMessage.writeBytes(messageBytes);
messageProducer.send(bytesMessage);
jmsMessageID = bytesMessage.getJMSMessageID();
} finally {
if (connection != null) {
connection.close();
}
}
return jmsMessageID;
}
}
Meilleures salutations
Il n'y a rien de mal avec les méthodes statiques. Cela dépend simplement de ce dont vous avez besoin. Il existe des outils fantastiques comme Apache Common, en fait StringUtils qui a beaucoup de méthodes statiques. Si vous voulez vous moquer des choses statiques, vous pouvez utiliser Powermock. Quoi qu'il en soit, cette question me semble un peu hors sujet car c'est plutôt une question d'opinion. –
'sendBytesMessage' n'est pas marqué' static' dans votre exemple de code – tommyO
Les méthodes statiques rendent difficile (ou impossible, si vous ne voulez pas utiliser quelque chose comme PowerMockito) de simuler la ressource externe dans les tests. Peut-être lire [Les méthodes statiques sont la mort à la testabilité] (http://misko.hevery.com/2008/12/15/static-methods-are-death-to-testability/). –