Stendhal Quest Testing: Difference between revisions

Jump to navigation Jump to search
Content deleted Content added
imported>MartinFuchs
imported>Tigertoes
mNo edit summary
 
(65 intermediate revisions by 5 users not shown)
Line 12: Line 12:
* if it's not repeatable, try to come back and ask for a quest again anyway!
* if it's not repeatable, try to come back and ask for a quest again anyway!


Some quests have already got a test written for them because chat logs have been provided. Please take a look at the report from [http://stendhalgame.org/hudson/job/stendhal_HEAD/lastStableBuild/cobertura/games_stendhal_server_maps_quests/? hudson] - quests which are all or mostly green are done, and quests which are all or mostly red need a chatlog provided.
Some quests have already got a test written for them because chat logs have been provided. Please take a look at the report from [http://stendhalgame.org/hudson/job/stendhal_HEAD/lastStableBuild/cobertura/games_stendhal_server_maps_quests/? Jenkins] - quests which are all or mostly green are done, and quests which are all or mostly red need a chatlog provided.

'''Tip:''' If you test on a [[Host_a_Stendhal_Server|local server]], you can use the <code>/teleportto ''npc''</code> command to travel faster. See the [[Stendhal:Administration|administration page]] for other useful commands.


== Run ChatTestCreator ==
== Run ChatTestCreator ==
Once you have the chatlog you can use games.stendhal.tools.test.ChatTestCreator to make a test. We assume you are using eclipse. First, copy the chat log into the project folder of your Stendhal project. For this tutorial we are using [[File:Test Gamechat.log]] - save it and rename it to gamechat.log like your own chatlogs would be, if you want to follow the tutorial exactly.
Once you have the chatlog you can use <code>games.stendhal.tools.test.ChatTestCreator</code> to make a test. We assume you are using eclipse. First, copy the chat log into the project folder of your Stendhal project. For this tutorial we are using [[File:Test Gamechat.log]] - save it and rename it to gamechat.log like your own chatlogs would be, if you want to follow the tutorial exactly.


Next make sure the character who made the chatlog is added to the list of testers.
Next make sure the character who made the chatlog is added to the list of testers.


Open src/games/stendhal/tools.test/LineAnalyser.java and add your name to <code>playerNames</code>.
Open <code>src/games/stendhal/tools.test/LineAnalyser.java</code> and add your name to <code>playerNames</code>.


Open src/games/stendhal/tools.test/ChatTestCreator.java in the editor in Eclipse then go to the green arrow button for running an application.
Open <code>src/games/stendhal/tools.test/ChatTestCreator.java</code> in the editor in Eclipse then go to the green arrow button for running an application.
Run Configurations ...
Run Configurations ...
Arguments tab
Arguments tab
Line 37: Line 39:
and it will be plain with no coloured highlighting.
and it will be plain with no coloured highlighting.


Cope and paste all that text into a new file which you should save in tests/games/stendhal/server/maps/quests/. Call it the same name as the class file for your Quest, with 'Test' at the end. We are testing RainbowBeans.java, so we name the file, RainbowBeansTest.java.
Copy and paste all that text into a new file which you should save in <code>tests/games/stendhal/server/maps/quests/</code>. Call it the same name as the class file for your Quest, with 'Test' at the end. We are testing <code>RainbowBeans.java</code>, so we name the file, <code>RainbowBeansTest.java</code>.


== Get the test to compile==
== Get the test to compile==
Line 77: Line 79:
@Test
@Test
public void testQuest() {
public void testQuest() {
npc = SingletonRepository.getNPCList().get(TODO_Name);
npc = SingletonRepository.getNPCList().get(TODO_NPC_Name);
</source>
</source>


Line 93: Line 95:
This is the class name of the quest file you are testing. For us, that's RainbowBeans.
This is the class name of the quest file you are testing. For us, that's RainbowBeans.


===TODO_Name===
===TODO_NPC_Name===
Fill in here, the name of the first NPC you spoke to for the quest. Put it in quotes : SingletonRepository.getNPCList().get("Pdiddi");
Fill in here, the name of the first NPC you spoke to for the quest. Put it in quotes: "Pdiddi" in the constructor RainbowBeansTest().
And once in the testQuest() function: SingletonRepository.getNPCList().get("Pdiddi");

===ZONE_NAME===
You can replace the default zone name "admin_test" by the zone, in which the quest actually happens. You can get this name just by looking in the display of the game client while playing the quest. Using the correct zone name is important if there is a teleport etc in the zone, which is used in the quest.


Now the errors should be gone:
Now the errors should be gone:
Line 210: Line 216:
import utilities.PlayerTestHelper;
import utilities.PlayerTestHelper;
import utilities.QuestHelper;
import utilities.QuestHelper;
import utilities.ZonePlayerAndNPCTestImpl;


public class RainbowBeansTest {
public class RainbowBeansTest extends ZonePlayerAndNPCTestImpl {

private Player player = null;
private Player player = null;
private SpeakerNPC npc = null;
private SpeakerNPC npc = null;
private Engine en = null;
private Engine en = null;

private String questSlot;
private String questSlot;
private static final String ZONE_NAME = "admin_test";
@BeforeClass
@BeforeClass
public static void setUpBeforeClass() throws Exception {
public static void setUpBeforeClass() throws Exception {
QuestHelper.setUpBeforeClass();
QuestHelper.setUpBeforeClass();
setupZone(ZONE_NAME);
}
public RainbowBeansTest() {
super(ZONE_NAME, "Pdiddi");
}
}


Line 336: Line 349:
Now the variables ''en'' and ''npc'' are associated with the new NPC.
Now the variables ''en'' and ''npc'' are associated with the new NPC.


==Advanced testing: more than dialog==
==Advanced testing: more than one dialog==


By now I'm going to assume that you are comfortable with basic tests, that you can test dialog, andthat you can modify the player by equipping him with items or setting his quest slot, if you need to.
By now I'm going to assume that you are comfortable with basic tests, that you can test dialog, andthat you can modify the player by equipping him with items or setting his quest slot, if you need to.
Line 369: Line 382:
</source>
</source>
and you can do other checks on the value of the quest slot, throughout.
and you can do other checks on the value of the quest slot, throughout.



==Advanced Testing: breaking up into several small tests==
==Advanced Testing: breaking up into several small tests==
Line 404: Line 416:
at utilities.PlayerTestHelper.equipWithMoney(PlayerTestHelper.java:190)
at utilities.PlayerTestHelper.equipWithMoney(PlayerTestHelper.java:190)


Solution: put the stendhal project folder on your classpath for running tests
Solution: put the stendhal project folder on your classpath for running tests - for Eclipse users see [[Stendhal on Eclipse#Running_JUnit_Tests_in_Eclipse|Running JUnit Tests in Eclipse]].