Jak test jednotky I perzistenci?

hlasů
43

Jako nováček v praxi testy řízený vývoj, často skončí v rozpacích, jak se jednotka testovacího vytrvalosti do databáze.

Vím, že technicky to bude integrační test (ne jednotka test), ale chci zjistit nejlepší strategie pro následující položky:

  1. Testování dotazů.
  2. Testování vložek. Jak mám vědět, že vložka, která se pokazilo, pokud selže? I to můžete vyzkoušet vložením a poté dotazování, ale jak mohu vědět, že dotaz není špatně?
  3. Testovací aktualizace a vymaže - stejně jako testování vložek

Jaké jsou nejlepší postupy pro to ty?


Co se týče testování SQL: Jsem si vědom toho, že by to mohlo být provedeno, ale když jsem použít O / R Mapper jako NHibernate přikládá nějaké pojmenování bradavice v aliasy používané pro výstup dotazy, a protože to je poněkud nepředvídatelný Nejsem si jistý, mohl bych vyzkoušet za to.

Měl jsem jen, opustit všechno a prostě věřit NHibernate? Nejsem si jistý, že je opatrný.

Položena 05/08/2008 v 10:43
zdroj uživatelem
V jiných jazycích...                            


10 odpovědí

hlasů
16

Podívejte se do DB jednotky. Jedná se o Java knihovna, ale tam musí být C # ekvivalentní. To vám umožní připravit databázi se souborem dat, takže víte, co je v databázi, pak můžete propojit s DB jednotkou vidět, co je v databázi. To může běžet na mnoha databázovými systémy, takže můžete použít vaši aktuální nastavení databáze, nebo použít něco jiného, ​​jako HSQL v Javě (implementace databáze Java s in volby paměti).

Chcete-li otestovat, zda váš kód správně pomocí databáze (který si s největší pravděpodobností měli dělat), pak je to způsob, jak jít k izolaci každý test a zajistit databázi se očekává data připravená.

Odpovězeno 11/08/2008 v 10:40
zdroj uživatelem

hlasů
15

Jak řekl Mike Kámen , DbUnit je skvělé pro získání databáze do původního stavu před spuštěním své testy. Jsou-li vaše testy hotové, DbUnit může dát databázi zpět do stavu, v jakém byl před spuštěním testů.

DbUnit (Java)

DbUnit.NET

Odpovězeno 25/08/2008 v 14:22
zdroj uživatelem

hlasů
4

Děláte Unit testování pomocí zesměšňovat se připojení k databázi. Tímto způsobem můžete vytvořit scénáře, kdy konkrétní dotazy v toku volání metody uspět nebo selhat. I obvykle stavět své falešné očekávání, takže skutečný text dotazu je ignorována, protože opravdu chci otestovat odolnost proti chybám metody a jak to zvládá sama - specifika SQL jsou irelevantní k tomuto účelu.

To samozřejmě znamená, že test nebude ve skutečnosti ověřit, zda tato metoda funguje , protože SQL může být špatně. To je místo, kde integrační testy kop. Za to, že jsem se očekávat, že někdo jiný bude mít důkladnější odpověď, jak jsem právě začíná dostat se vypořádat s těmi, které sám.

Odpovězeno 05/08/2008 v 10:47
zdroj uživatelem

hlasů
3

Napsal jsem příspěvek sem o jednotky testování datovou vrstvu , která pokrývá přesně tento problém. Omlouvám se za (ostudné) zástrčky, ale článek je příliš dlouhý, aby post zde.

Doufám, že vám pomůže - to funguje velmi dobře pro mě v průběhu posledních 6 měsíců na 3 aktivních projektech.

Pozdravy,

Rob G

Odpovězeno 13/08/2008 v 00:23
zdroj uživatelem

hlasů
2

U projektů založených JDBC, Akolyto rámec může být použit: http://acolyte.eu.org . To umožňuje, aby maketa přístup k datům, které chcete testům, těží z JDBC abstrakce, aniž by bylo nutné zvládnout specifický testovací DB.

Odpovězeno 09/07/2014 v 10:20
zdroj uživatelem

hlasů
2

Pro NHibernatebych rozhodně obhajují jen vysmívá Out NHibernate APIpro jednotkové testy - důvěřovat knihovnu dělat správnou věc. Chcete-li zajistit, aby údaje ve skutečnosti jde do DB, dělat integrační test.

Odpovězeno 05/08/2008 v 12:20
zdroj uživatelem

hlasů
2

Problém jsem zažil při testování jednotka vytrvalost, a to zejména bez ORM a tak posměšný databáze (připojení), je to, že nemáte opravdu vědět, zda vaše dotazy uspět. Mohlo by se stát, že vám vaše dotazy jsou speciálně navrženy pro konkrétní verzi databáze a pouze uspět s touto verzí. Už nikdy to zjistil, když se vysmívají databázi. Takže podle mého názoru, Unit testování vytrvalost je jen omezené použití. Vždy byste měli přidat testy spuštěné vůči cíleným databázi.

Odpovězeno 05/08/2008 v 11:29
zdroj uživatelem

hlasů
1

I obvykle vytvořit úložiště a použít ho k záchraně mého subjektu, pak načíst čerstvý. Pak jsem tvrdí, že vyvolány se rovná uložen.

Odpovězeno 27/08/2008 v 22:17
zdroj uživatelem

hlasů
1

Technicky unit testy perzistence nejsou Jednotkové testy, které jsou integrační testy.

S C # pomocí mbUnit, jednoduše použít atributy SqlRestoreInfo a ROLLBACK

    [TestFixture]
    [SqlRestoreInfo(<connectionsting>, <name>,<backupLocation>]
    public class Tests
    {

        [SetUp]
        public void Setup()
        {

        }

        [Test]
        [RollBack]
        public void TEST()
        {
           //test insert. 
        }
    }

To samé lze provést v NUnit, excpet názvy atributů se liší slighty.

Pokud jde o kontrolu, zda váš dotaz byl succeful, obvykle je třeba ji sledovat pomocí druhý dotaz, zda databáze byl změněn podle očekávání.

Odpovězeno 05/08/2008 v 12:27
zdroj uživatelem

hlasů
1

Také bych zesměšňovat databáze, a zkontrolujte, že dotazy jsou to, co jste očekávali. Je zde riziko, že test kontroluje nesprávné sql, ale to by byla detekována u integračních testů

Odpovězeno 05/08/2008 v 11:19
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more