A Multi User Unit Test Framework for Testing Database Applications
Authors
Christensen, Claus Abildgaard ; Gundersborg, Steen ; Linde, Kristian de ; Thornber, Jacob Richard
Term
4. term
Education
Publication year
2004
Abstract
Enhedstest er fundamentet for at bygge korrekte og robuste applikationer. Enhedstest af databaseapplikationer er anderledes på grund af persistens og fremmednøgler (relationer mellem tabeller). Før en test kører, skal de data, som fremmednøgler henviser til, allerede findes. Efter hver test skal alle ændringer ryddes op; ellers kan efterfølgende tests fejle. Mange testframeworks antager, at testcases er uafhængige. Holder man fast i den antagelse for databaser, giver det en tung test-fixture—den opsætning og de testdata, en test behøver—fordi tilstanden skal genskabes for hver testcase. Vi foreslår at tillade afhængigheder mellem testcases og enhedstests, så test-fixture kan genbruges og overflødig kode undgås. Når opsætning og oprydning kun sker én gang per enhedstest i stedet for for hver testcase, forbedres ydeevnen. Vi har designet og implementeret et sådant testframework, som minimerer test-fixtures og udfører automatisk oprydning i databasen, også ved systemnedbrud. Vi konkluderer, at frameworket er enklere at bruge end eksisterende frameworks, muliggør hurtigere testkørsel, kræver mindre arbejde af udviklere og kan integreres med et eksisterende framework.
Unit testing is a foundation for building correct and robust applications. For database applications, unit testing is different because of persistence and foreign key constraints (links between tables). Before a test runs, any data referenced by foreign keys must already exist. After each test, all changes must be cleaned up; otherwise later tests may fail. Many test frameworks assume test cases are independent. In databases, keeping that assumption leads to heavy test fixtures—the setup and test data a test needs—because the required state must be recreated for every test case. We propose allowing dependencies between test cases and unit tests so fixtures can be reused and redundant code avoided. When setup and cleanup happen once per unit test instead of for every test case, performance improves. We designed and implemented this test framework. It minimizes fixtures and automatically cleans the database, even if the system crashes. We conclude that the framework is simpler to use than existing frameworks, runs tests faster, requires less developer effort, and can be integrated with an existing framework.
[This abstract was generated with the help of AI]
Documents
