Reputation: 59
I'm a newbie here.
My question is: Is it possible to run those classes in one Java class?
@RunWith(Suite.class)
@Suite.SuiteClasses({
Test.class,
Chart.class,
})
Note:
Test.class
-> This is a Junit Test Class
Chart.class
-> This is a Java Application Class
I hope my question is clear. I'm not totally good in English.
This Code is for Java Application: Chart.Class
public static class PieChart extends JFrame {
private static final long serialVersionUID = 1L;
public PieChart(String applicationTitle, String chartTitle) {
super(applicationTitle);
// This will create the dataset
PieDataset dataset = createDataset();
// based on the dataset we create the chart
JFreeChart chart = createChart(dataset, chartTitle);
// we put the chart into a panel
ChartPanel chartPanel = new ChartPanel(chart);
// default size
chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
// add it to our application
setContentPane(chartPanel);
// it will save the chart on the specified location
String fileLocation = "C:/temp/pieChartReport.jpg";
saveChart(chart, fileLocation);
}
/**
* Creates a sample dataset
*/
ABMTLinks abmt = new ABMTLinks();
private PieDataset createDataset() {
DefaultPieDataset result = new DefaultPieDataset();
result.setValue("Failed:", abmt.Fail);
result.setValue("Error:", 100);
result.setValue("Passed:", abmt.Pass);
return result;
}
/**
* Creates a chart
*/
private JFreeChart createChart(PieDataset dataset, String title) {
JFreeChart chart = ChartFactory.createPieChart3D(title, // chart title
dataset, // data
true, // include legend
true,
true);
PiePlot3D plot = (PiePlot3D) chart.getPlot();
plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0} {1} {2}")); //Shows the total count and percentage for Failed/Passed/Error
plot.setStartAngle(480);
plot.setDirection(Rotation.CLOCKWISE);
plot.setForegroundAlpha(0.5f);
return chart;
}
//This will store the chart on the specified location/folder
public void saveChart(JFreeChart chart, String fileLocation) {
String fileName = fileLocation;
try {
/**
* This utility saves the JFreeChart as a JPEG First Parameter:
* FileName Second Parameter: Chart To Save Third Parameter: Height
* Of Picture Fourth Parameter: Width Of Picture
*/
ChartUtilities.saveChartAsJPEG(new File(fileName), chart, 500, 270);
} catch (IOException e) {
e.printStackTrace();
System.err.println("Problem occurred creating chart.");
}
}
public static void main(String[] args) {
String pieChartTitle = "Harold's Pie Chart";
String pieChartName = "Pie Chart";
PieChart demo = new PieChart(pieChartName, pieChartTitle);
demo.pack();
demo.setVisible(true);
}
}
This Code is for JUnit Test Code: Test.Class
import com.thoughtworks.selenium.*;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.Test;
public class ABMTLinks extends SeleneseTestCase {
public int Fail=10, Pass=10;
public static String
//Declaring of variables to store the Actual values for URLs
HMT = "http://dev.abmt.igloo.com.au/GetInvolved/Hostamorningtea/tabid/165/Default.aspx",
DMT = "http://dev.abmt.igloo.com.au/GetInvolved/Donatetoamorningtea/tabid/141/Default.aspx";
@Before
public void setUp() throws Exception {
selenium = new DefaultSelenium("localhost", 1111, "*googlechrome", "http://dev.abmt.igloo.com.au/");
selenium.start();
}
@Test
public void testUntitled() throws Exception {
selenium.open("/GetInvolved/tabid/114/Default.aspx");
selenium.click("link=Get Involved");
selenium.waitForPageToLoad("30000");
if (URL.equals(HMT)
&& URL1.equals(DMT)
){
Pass = Pass + 1;
System.out.println("All pages redirects to each URL with no errors");
}
else {
Fail = Fail + 1;
assertTrue("Test Case is Failed!", false);
System.out.print("Failed");
}
}
@After
public void tearDown() throws Exception {
System.out.println(Fail + "+" + Pass);
}
}
Upvotes: 2
Views: 1731
Reputation: 40066
It seems to me that you are only trying to get the test result and generate some special report base on it. Why not simply write a little program to read the test report generated by JUnit and create the chart you want?
(Added) Though I believe what you are doing is heading incorrect direction and is not making sense, there are probably something you can look into.
You said you want to invoke Chart to generate a pie chart base on information in Test, you can consider using @AfterClass:
public class Test {
private int success;
private int fail;
@AfterClass
public void generateChart() {
// generate your chart base on this.success and this.fail
}
}
@AfterClass will be invoked after all tests in this class is invoked.
But still, it is quite meaningless in doing so, because the whole idea of unit test is to have validations etc all done automatically and you shouldn't do manual inspection with the process or result in test. Generating chart helps nothing in telling the computer what's success/failure. And, what's your code suggests to me is nothing more than normal unit test report, telling you how many test case succeeded/failed. Why do something extra without real value?
Upvotes: 0
Reputation: 18714
No it is not possible.
Classes that are listed under @Suite.SuiteClasses({})
have to be valid Junit4 Test-Classes. These are classes that have at least one method annotated with @Test
.
Upvotes: 2