150 likes | 334 Views
Execução de testes: driver e stub. Driver e Stub. Driver. main. X. SUT. S1. S2. Stubs. Driver. Operação que exercita o módulo sob teste Envia valores, coleta e compara resultados Exemplo: JUnit test cases. Exemplo: Driver. public class TestDriver extends TestCase { …
E N D
Driver e Stub Driver main X SUT S1 S2 Stubs
Driver • Operação que exercita o módulo sob teste • Envia valores, coleta e compara resultados • Exemplo: • JUnit test cases
Exemplo: Driver public class TestDriver extends TestCase { … public static void testDeposito(){ BankAccount sut = new BankAccount(100); sut.remove(60); Assert.assertEquals(sut.saldo(), 40); } }
Stub • Cenário: • A e B são unidades • A depende de B • Bnão pode ser usado • Stub: Substituto de B para testar A
Por que usar stubs? • O componente real (B) não está pronto • Usar componente real não é prático para o teste. Exemplos: • Requer conexão de rede • É ineficiente
Custo de Stubs • Pode ser trabalhoso implementar manualmente • Stub e Stubbed devem respeitar mesma interface • Pode deixar o código menos legível
Exemplo: Stub public static int testPath(int x){ y = foo(x); if (x > y) return x – y else if (x < y) return x + y; else x/y; } public static int foo(int x) { // assuma que implementacão real // nao está pronta ou é inviável // de usar para o teste }
Observe que o sistema não está preparado para receber um stub!
Passo 1: preparação da interface public static int testPath(int x, CmdFoo cf){ y = cf.foo(x); if (x > y) return x – y else if (x < y) return x + y; else return x/y; } static interface CmdFoo {public int foo(int x);}
Passo 2: instanciação da interface public static int testPath(int x, CmdFoo cf){ y = cf.foo(x); if (x > y) return x – y else if (x < y) return x + y; else return x/y; } static interface CmdFoo {public int foo(int x);} … public static void test1() { int x = 1; CmdFoo foo1 = new CmdFoo() { public int foo(int x) { return x + 1; } }; testPath(x, foo1); }
Passo 2: instanciação da interface public static int testPath(int x, CmdFoo cf){ y = cf.foo(x); if (x > y) return x – y else if (x < y) return x + y; else return x/y; } static interface CmdFoo {public int foo(int x);} … public static void test2() { int x = 1; CmdFoo foo1 = new CmdFoo() { public int foo(int x) { return x - 1; } }; testPath(x, foo1); }
Passo 2: instanciação da interface public static int testPath(int x, CmdFoo cf){ y = cf.foo(x); if (x > y) return x – y else if (x < y) return x + y; else x/y; } static interface CmdFoo {public int foo(int x);} … public static void test3() { int x = 0; CmdFoo foo1 = new CmdFoo() { public int foo(int x) { return 0; } }; testPath(x, foo1); } BANG!!!
Existem ferramentas para apoiar a construção de stubs. E.g., jmock.