Come gestire una grande quantità di casi d'uso molto specifici

1

Quindi sto scrivendo un programma che esegue parecchi test diversi. I test eseguiti variano a seconda degli elementi dell'interfaccia utente selezionati dall'utente. Ad esempio, su un modulo ho 7 pulsanti di opzione e 6 caselle di controllo. Per ogni variazione, vengono eseguiti ovunque da 2-5 diversi test. L'utente è in grado di selezionare qualsiasi combinazione (ad eccezione di un solo pulsante di opzione) ed eseguire i test per quella selezione. Il mio metodo per determinare quali test eseguire è molto ridondante e mi chiedevo se esistesse un approccio più pulito. Ecco un esempio:

if(radiobutton1.checked)
{
  if(checkbox1.checked)
  {
    runtest1(param a, param b);
    runtest2(param b, param f);
  }
  if(checkbox2.checked)
  {
    runtest1(param f, param n);
    runtest2(param c, param l);
    runtest3(param f, param d);
  }
}
else if(radiobutton2.checked)
//and so on...

Quindi ho 42 casi d'uso e sto eseguendo 2-5 sottotest per ciascuno. C'è un modo migliore per farlo?

    
posta emsimpson92 18.07.2018 - 23:21
fonte

1 risposta

5

Puoi affrontare il problema da una direzione opposta.
Crea un tipo con due funzioni, una per eseguire il test e un'altra che deve essere eseguita per il controllo del test.

public class Test
{
    public Action Run { get; set; }
    public Func<bool> CanRun { get; set; }
}

Quindi definisci semplicemente tutti i test con il loro predicato

var test1 = new Test
{
    Run = () => runtest1(param a, param b),
    CanRun = () => radiobutton1.checked && checkbox1.checked
};
var test2 = new Test
{
    Run = () => runtest2(param b, param f),
    CanRun = () => radiobutton1.checked && checkbox1.checked
};
var test3 = new Test
{
    Run = () => runtest1(param f, param n),
    CanRun = () => radiobutton1.checked && checkbox2.checked
};
var test4 = new Test
{
    Run = () => runtest2(param c, param l),
    CanRun = () => radiobutton1.checked && checkbox2.checked
}

// Then tests execution will looks much simplier
var testsToRun = 
    new[] { test1, test2, test3, test4 }.Where(test => test.CanRun());

foreach (var test in testsToRun)
{
    test.Run();
}

L'approccio sopra dovrebbe semplificare la manutenzione, in cui ogni test è isolato dagli altri, quando si aggiungono o si rimuovono i test non è necessario toccare il codice relativo ad altri test.

    
risposta data 19.07.2018 - 01:51
fonte

Leggi altre domande sui tag