Vérifier si une méthode a été appelée à l'intérieur d'une autre méthode

Est-il possible en java pour vérifier si une certaine méthode a été appelée à l'intérieur d'une autre méthode? Je suis en train de tester une de la classe et de la méthode que je vais avoir des ennuis avec joue son et il n'y a pratiquement aucun moyen d'en obtenir le fichier audio qui est lu(attribut privé à l'intérieur d'un intérieur de classe), sans en modifier le code. Cependant, la façon dont la méthode joue des sons est-il appelle une méthode qui joue un son unique (playSadMusic, playHappyMusic, etc). Ces méthodes sont dans une interface que je dois créer un objet fantaisie pour. Je suis un peu coincé sur la façon dont je voudrais exactement tester cette. Toutes les pensées? D'autres idées sur comment je pourrais peut-être tester cette autre que de vérifier si une certaine méthode était l'appel sont les bienvenus.

Je suis en utilisant JMock 2.6.0 et JUnit 4

l'audio interface

public interface StockTickerAudioInterface {

    public abstract void playHappyMusic();

    public abstract void playSadMusic();

    public abstract void playErrorMusic();
}

anthère interface je dois créer une maquette pour

public interface StockQuoteGeneratorInterface {
    public abstract StockQuoteInterface getCurrentQuote() throws Exception;

    public abstract String getSymbol();

    public abstract void setSymbol(String symbol);

    public abstract StockQuoteGeneratorInterface createNewInstance(String symbol);

}

la classe testée

public class StockQuoteAnalyzer {
private StockTickerAudioInterface audioPlayer = null;
private String symbol;
private StockQuoteGeneratorInterface stockQuoteSource = null;
private StockQuoteInterface lastQuote = null;
private StockQuoteInterface currentQuote = null;
public StockQuoteAnalyzer(String symbol,
StockQuoteGeneratorInterface stockQuoteSource,
StockTickerAudioInterface audioPlayer)
throws InvalidStockSymbolException, NullPointerException,
StockTickerConnectionError {
super(); 
//Check the validity of the symbol.
if (StockTickerListing.getSingleton().isValidTickerSymbol(symbol) == true){
this.symbol = symbol;
} else {
throw new InvalidStockSymbolException("Symbol " + symbol
+ "not found.");
}
if (stockQuoteSource == null) {
throw new NullPointerException(
"The source for stock quotes can not be null");
}
this.stockQuoteSource = stockQuoteSource;
this.audioPlayer = audioPlayer;
}
public double getChangeSinceLast() {
double retVal = 0.0;
if (this.lastQuote != null) {
double delta = this.currentQuote.getLastTrade() - this.lastQuote.getLastTrade();
retVal = 100 * (delta / this.lastQuote.getLastTrade());
}
return retVal;
}
public double getChangeSinceYesterday() {
double delta = (this.currentQuote.getLastTrade() - this.currentQuote
.getClose());
return 100 * (delta / this.currentQuote.getClose());
}
public void playAppropriateAudio() {
if ((this.getChangeSinceYesterday() > 2)
|| (this.getChangeSinceLast() > 0.5)) {
audioPlayer.playHappyMusic();
}
if ((this.getChangeSinceYesterday() < -2)
|| (this.getChangeSinceLast() < -0.5)) {
audioPlayer.playSadMusic();
}
}
}
ma sphère de cristal dit "oui" oh et s'il vous plaît fournir un peu de code et de dire ce que vous avez essayé jusqu'à présent
Vous pouvez vérifier la trace de la pile.
Suivez John Snow. Mockito est la réponse. Vous pouvez créer junit sur combien de fois une méthode appelée.
Je suis à l'aide de jmock2.6.0 et JUnit 4
Il semble être en mesure d'obtenir un comportement similaire avec jMock. Vérifier édité mon post

OriginalL'auteur user2337029 | 2013-05-15