((Uso di "utenti" come esempio per rappresentare uno dei molti tipi di record))
Un'applicazione con tracciamento utente ha in genere una tabella Utente. Molte, se non tutte, le aziende impongono che un record utente non venga mai effettivamente eliminato. Invece, dovrebbe essere aggiunto un campo di discrezione "isDeleted". L'altra possibilità è una tabella shadow che tiene traccia degli utenti eliminati e della propria serie di domande che non dovrebbero essere affrontate qui.
Quindi, in generale, per recuperare un elenco di utenti, potrei avere un metodo come questo:
public ICollection<User> GetUsers() {
return Users.Where(x => x.isDeleted == false);
}
Quindi ho un SDK che avvolge un servizio web che chiama servizi di dominio che dipendono dall'accesso ai dati che colpisce il mio database. L'eventualità è qualcosa del genere:
public void DeleteUser(int id) {
var user = Users.Where(x => x.id == id).Single();
user.isDeleted = true;
user.SaveDatShiz();
}
Quindi, per quanto riguarda il mio test di integrazione? Ho un test di integrazione qualcosa del genere:
public void TestUserCreation() {
Dependency.CreateUser(user);
var integratedUser = Dependency.GetUserBySomething(user.Something);
Assert.AreEqual(integratedUser, user, "wut?");
Dependency.DeleteUser(integratedUser.id); //Clean up!
}
La chiave sopra è che il mio Test di integrazione pensa che stia pulendo, ma in realtà il mio database di produzione ha tre volte più utenti di test falsi rispetto agli utenti reali. La tabella è SUPER gonfiata dall'esecuzione di test di integrazione sulla distribuzione in un ambiente di distribuzione continua.
Quindi, come faccio a lasciare che i miei test di integrazione EFFETTIVAMENTE cancellino un utente? Non sto chiedendo una risposta in codice, sto chiedendo una risposta architettonicamente corretta.
E.G .: Devo creare un endpoint che esegue effettivamente un'eliminazione, ma richiede una chiave che solo il test di integrazione conosce? Sembra disordinato ...
E.G.2: Devo accedere direttamente al database di produzione ed eseguire query di eliminazione su di esso? (Lol, total lawl no.)
E.G.3: Nessun altro si preoccupa di questo, quindi non dovrei (Non Rimborsabile !!! Voglio dire .. Non Accettabile !!!!)