Unit testing Unit testing TDD with JUnit. Unit Testing Unit testing with JUnit 2 Testing concepts Unit testing Testing tools JUnit Practical use of tools

Download Unit testing Unit testing TDD with JUnit. Unit Testing Unit testing with JUnit 2 Testing concepts Unit testing Testing tools JUnit Practical use of tools

Post on 31-Dec-2015

216 views

Category:

Documents

1 download

Embed Size (px)

TRANSCRIPT

  • Unit testing

    TDD with JUnit

    Unit testing with JUnit

  • Unit TestingUnit testing with JUnit*Testing conceptsUnit testingTesting toolsJUnitPractical use of toolsExamplesHow to create JUnit TestCase in Eclipse

    Unit testing with JUnit

  • Why?Unit testing with JUnit*Why testing?Improve software designMake software easier to understandReduce debugging timeCatch integration errorsIn short, to Produce Better CodePreconditionsWorking codeGood set of unit tests

    Unit testing with JUnit

  • What should be tested ?Unit testing with JUnit*

    Test for boundary conditionsTest for both success and failureTest for general functionalityEtc..

    Unit testing with JUnit

  • When to start testingUnit testing with JUnit*

    Software quality and testing is alife-cycle process

    Unit testing with JUnit

  • When to start testing...Unit testing with JUnit*

    At the time of starting the projectsHow we start the projects ??Do we have any formal way ??

    Unit testing with JUnit

  • The V-model of developmentUnit testing with JUnit*

    Unit testing with JUnit

  • Fact of testingUnit testing with JUnit*

    Testing does not guaranteethe absence of defects

    Unit testing with JUnit

  • What is test caseUnit testing with JUnit*

    A test case is a document that describes an input, action, or event and an expected response, to determine if a feature of an application is working correctly

    Unit testing with JUnit

  • Good test case designUnit testing with JUnit*An good test case satisfies the following criteria:Reasonable probability of catching an errorDoes interesting thingsDoesnt do unnecessary thingsNeither too simple nor too complexNot redundant with other testsMakes failures obviousMutually Exclusive, Collectively Exhaustive

    Unit testing with JUnit

  • Test case design techniqueUnit testing with JUnit*Test case design techniques can be broadly split into two main categories

    Black box (functional)

    White box (structural)

    Unit testing with JUnit

  • Black Box testsUnit testing with JUnit*Targeted at the apparent simplicity of the softwareMakes assumptions about implementationGood for testing component interactionsTests the interfaces and behavior

    Unit testing with JUnit

  • White Box testsUnit testing with JUnit*Targeted at the underlying complexity of the softwareIntimate knowledge of implementationGood for testing individual functionsTests the implementation and design

    Unit testing with JUnit

  • Test case writing exampleUnit testing with JUnit*

    Suppose we have two parameters we want to cover in a set of tests. Parameters are as follows..

    Operating systemWin98Win2kWinxp

    PrintersHP 4100HP 4200

    How We should write test case for this ??

    Unit testing with JUnit

  • Types of TestsUnit testing with JUnit*UnitIndividual classes or types

    ComponentGroup of related classes or types

    IntegrationInteraction between classes

    Unit testing with JUnit

  • What is a testing framework?Unit testing with JUnit*A test framework provides reusable test functionality which:Is easier to use (e.g. dont have to write the same code for each class)Is standardized and reusableProvides a base for regression tests

    Unit testing with JUnit

  • Why use a testing framework?Unit testing with JUnit*Each class must be tested when it is developedEach class needs a regression testRegression tests need to have standard interfacesThus, we can build the regression test when building the class and have a better, more stable product for less work

    Unit testing with JUnit

  • Regression testingUnit testing with JUnit*New code and changes to old code can affect the rest of the code baseAffect sometimes means breakWe need to run tests on the old code, to verify it works these are regression testsRegression testing is required for a stable, maintainable code base

    Unit testing with JUnit

  • Testing toolsUnit testing with JUnit*

    Tools are part of the qualityequation, but not the entireequation

    Unit testing with JUnit

  • JUnitUnit testing with JUnit*JUnit is a framework for writing unit testsA unit test is a test of a single classA test case is a single test of a single methodA test suite is a collection of test casesUnit testing is particularly important when software requirements change frequentlyCode often has to be refactored to incorporate the changesUnit testing helps ensure that the refactored code continues to work

    Unit testing with JUnit

  • JUnit..Unit testing with JUnit*JUnit helps the programmer:Define and execute tests and test suitesFormalize requirements and clarify architectureWrite and debug codeIntegrate code and always be ready to release a working version

    Unit testing with JUnit

  • What JUnit doesUnit testing with JUnit*JUnit runs a suite of tests and reports resultsFor each test in the test suite:JUnit calls setUp()This method should create any objects you may need for testing

    Unit testing with JUnit

  • What JUnit doesUnit testing with JUnit*JUnit calls one test methodThe test method may comprise multiple test cases; that is, it may make multiple calls to the method you are testingIn fact, since its your code, the test method can do anything you wantThe setUp() method ensures you entered the test method with a virgin set of objects; what you do with them is up to youJUnit calls tearDown()This method should remove any objects you created

    Unit testing with JUnit

  • Creating a test class in JUnitUnit testing with JUnit*Define a subclass of TestCase Override the setUp() method to initialize object(s) under test. Override the tearDown() method to release object(s) under test. Define one or more public testXXX() methods that exercise the object(s) under test and assert expected results. Define a static suite() factory method that creates a TestSuite containing all the testXXX() methods of the TestCase. Optionally define a main() method that runs the TestCase in batch mode.

    Unit testing with JUnit

  • FixturesUnit testing with JUnit*A fixture is just a some code you want run before every testYou get a fixture by overriding the method protected void setUp() { }The general rule for running a test is:protected void runTest() { setUp(); tearDown(); }so we can override setUp and/or tearDown, and that code will be run prior to or after every test case

    Unit testing with JUnit

  • Implementing setUp() methodUnit testing with JUnit*Override setUp() to initialize the variables, and objectsSince setUp() is your code, you can modify it any way you like (such as creating new objects in it)Reduces the duplication of code

    Unit testing with JUnit

  • Implementing the tearDown() methodUnit testing with JUnit*In most cases, the tearDown() method doesnt need to do anythingThe next time you run setUp(), your objects will be replaced, and the old objects will be available for garbage collectionLike the finally clause in a try-catch-finally statement, tearDown() is where you would release system resources (such as streams)

    Unit testing with JUnit

  • The structure of a test methodUnit testing with JUnit*A test method doesnt return a resultIf the tests run correctly, a test method does nothingIf a test fails, it throws an AssertionFailedErrorThe JUnit framework catches the error and deals with it; you dont have to do anything

    Unit testing with JUnit

  • Test suitesUnit testing with JUnit*In practice, you want to run a group of related tests (e.g. all the tests for a class)To do so, group your test methods in a class which extends TestCaseRunning suites we will see in examples

    Unit testing with JUnit

  • assertX methodsUnit testing with JUnit*static void assertTrue(boolean test)static void assertFalse(boolean test)assertEquals(expected, actual) This method is heavily overloaded: arg1 and arg2 must be both objects or both of the same primitive typeFor objects, uses your equals method, if you have defined it properly, as public boolean equals(Object o) --otherwise it uses ==.assertSame(Objectexpected, Objectactual)Asserts that two objects refer to the same object (using ==) assertNotSame(Objectexpected, Objectactual)assertNull(Objectobject)

    Unit testing with JUnit

  • assertX methodsUnit testing with JUnit*assertNotNull(Objectobject) fail()Causes the test to fail and throw an AssertionFailedErrorUseful as a result of a complex test, when the other assert methods arent quite what you want .

    All the above may take an optional String message as the first argument, for example, static void assertTrue(String message, boolean test)

    Unit testing with JUnit

  • Organize The Tests Unit testing with JUnit*Create test cases in the same package as the code under testFor each Java package in your application, define a TestSuite class that contains all the tests for validating the code in the packageDefine similar TestSuite classes that create higher-level and lower-level test suites in the other packages (and sub-packages) of the applicationMake sure your build process includes the compilation of all tests

    Unit testing with JUnit

  • JUnit frameworkUnit testing with JUnit*

    Unit testing with JUnit

    Testing client

    run(TestResult)setUp()runTest()tearDown()

    TestCase

    fName

    setUp()runTest()tearDown()test1()test2()

    ConcreteTestCase

    action()

    TestedClass

    setUp()runTest()tearDown()

    TestResult

    runTest()

    test1()ortest2()

    Test

    run(TestResult)addTest(Test)

    TestSuite

    fTests

    forall test in fTests

Recommended

View more >