私はUtilクラスのためにJavaの静的メソッドのファンです。しかし、私はいくつかの同僚の間で、静的メソッドは決して外部リソースを使用すべきではないといういくつかの議論に出会った。しかし、なぜそれが悪い、あるいは危険なのかを説明することはできません。私が見つけた唯一の理由は、テスト中にその外部リソースを模擬するのは難しいかもしれないということです。しかし、それは本当に唯一の理由ですか?なぜ外部リソースに静的メソッドを使用しないのですか?
以下に、静的メソッドの例を示します。静的に使用するのが悪いアプローチであるべき理由を理解したいと思います。
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;
}
}
敬具
静的メソッドに問題はありません。それはちょうどあなたが必要なものに依存します。多くの静的メソッドを持つ、実際にはStringUtils、apacheのような素晴らしいツールがあります。静的なものをモックしたい場合は、Powermockを使うことができます。とにかく、この質問は私には分からないようですが、これは意見に基づくものに似ているからです。 –
'sendBytesMessage'はあなたのサンプルコードで' static'とマークされていません – tommyO
静的メソッドは、テストで外部リソースを模擬するために難しくなります(またはPowerMockitoのようなものを使用したくない場合は不可能)。おそらく読んで[静的メソッドは、テスト可能性への死です](http://misko.hevery.com/2008/12/15/static-methods-are-death-to-testability/)。 –