La correzione per questo dipende realmente dal tipo di file di dati. Se potessi postare potremmo aiutarti di più.
Per il momento sto assumendo poiché phpunit per natura è un framework di test unitario alla volta che non si sta tentando di eseguire più browser contemporaneamente, ma si vuole solo riservare l'opzione per cambiare i browser come tu ritieni opportuno
Hai ragione che dovresti utilizzare setBrowser in setUp. Quando eseguito, PHPUnit eseguirà sempre setUp per primo e tearDown() per ultimo. Una buona pratica qui è quella di creare la propria classe di unit test-test personalizzata in cui è possibile personalizzare questi metodi.
class customUnitTest extends PHPUnit_Extensions_Selenium2TestCase {
public $browser = "firefox";
public function setUp() {
$this->setBrowser("*".$browser);
}
}
Ora, quando si sta scrivendo un test di estendere la classe di test personali e impostare il browser di conseguenza
class newTest extends customUnitTest {
$this->browser = "safari";
public function testBlah {
blah blah...
}
}
setUp verrà eseguito durante l'esecuzione, e tirerà nella variabile browser. Per impostazione predefinita otterrete Firefox ma se alcuni test sono stati testati in modo più appropriato su altri browser avete questa opzione.
Se si desidera poter modificare tutti i browser contemporaneamente in tutti i test, è necessario valutare l'assegnazione del valore del browser in base a una variabile di ambiente.
class customUnitTest extends PHPUnit_Extensions_Selenium2TestCase {
try {
public $browser = getenv("SELENIUM_BROWSER");
} catch (Exception $e) {
public $browser = "firefox";
}
public function setUp() {
$this->setBrowser("*".$browser);
}
}
Con questa impostazione si può cambiare il browser per ogni prova che non è hard-coded il browser in sé modificando l'SELENIUM_BROWSER variabile di ambiente. In questo modo possiamo eseguire lo stesso codice su server diversi con diversi browser predefiniti senza dover riscrivere nulla.
Si noti che l'ereditarietà multipla non è una buona pratica. Può portare a un codice fragile e persino a minacce alla sicurezza se non si impostano correttamente metodi/variabili. Tuttavia in questo caso è utile perché possiamo definire i metodi del framework PHPUnit a nostro piacimento, e otteniamo tutti i metodi di base del selenio nel nostro test. Quindi, per eseguire un metodo predefinito selenio noi scrive appena
$this->open("www.google.com");
Questo è un metodo molto diverso da quello l'approccio generale di assegnare il selenio ad un oggetto, come il test si scrive è l'oggetto di selenio, ma sembra più php appropriata , soprattutto per questo caso d'uso.
Bello, anche se getenv e l'eredità non sono soluzioni lisce. Comunque mostra ciò che posso fare. Grazie. PS. Spero che l'implementazione di Selenium2TestCase sia cambiata da quando ho scritto il problema ... o lo sarà. –