Sono come fare il TDD, così ho iniziato tutto prendendo in giro oggetti, creando interfacce, stub, grandiosi.
Il design sembra funzionare, ora implementerò le cose, molto del codice usato negli stub verrà riutilizzato nella mia reale implementazione yay!
Ora dovrei duplicare i test per utilizzare l'implementazione dell'oggetto reale (ma mantenere l'oggetto mock delle cose sensibili come Database e "servizi" che sono fuori dal mio contesto (chiamate http, ecc ...)) o semplicemente cambiare i mock e gli stub dei test reali per usare gli oggetti reali .......
Quindi la domanda è: mantenere due test o sostituire gli stub, mock?
E dopo, dovrei continuare a progettare con i mock, gli stub o semplicemente andare con oggetti reali?
(Mi sto solo rendendo chiaro che terrò l'oggetto finto delle cose sensibili come database e servizi che sono fuori dal mio contesto, in entrambe le situazioni.)
Modifica
[Fact]
public void Change_status()
{
var dbContext = MockRepository.GenerateStub<IDbContext>();
var repository = MockRepository.GenerateMock<IRepository<Foo>>();
var predicate = MockRepository.GenerateStub<Func<Foo, bool>>();
repository.Expect(x => x.Get(predicate)).Return(_foo).Repeat.Once();
dbContext.Expect(x => x.Commit());
var ctl = MockRepository.GenerateStub<IFooCtl>();
ctl.Stub(x => x.RejectRequest(_fooView)).WhenCalled(delegate
{
var foo = repository.Get(predicate);
foo.Status = Status.Rejected;
_fooView.Status = Status.Rejected.ToString();
}).Return(true);
ctl.RejectRequest(_fooView);
repository.VerifyAllExpectations();
dbContext.VerifyAllExpectations();
Assert.True(_fooView.Status == "Rejected");
Assert.True(result.Count() == 1);
}
Questo è un test, in cui prendo in giro il repository, il contesto e la facciata. Quindi quello che sto cercando di dire è se dovessi cambiare lo stub della facciata per usare il codice "reale", quindi questo dovrebbe essere testato come
[Fact]
public void Change_status()
{
var dbContext = MockRepository.GenerateStub<IDbContext>();
var repository = MockRepository.GenerateMock<IRepository<Foo>>();
var predicate = MockRepository.GenerateStub<Func<Foo, bool>>();
repository.Expect(x => x.Get(predicate)).Return(_foo).Repeat.Once();
dbContext.Expect(x => x.Commit());
var ctl = new FooCtl(loanRepository, happyLoanDbContext);
var result = ctl.RejectRequest(_loanView);
repository.VerifyAllExpectations();
dbContext.VerifyAllExpectations();
Assert.True(_result);
}
O se dovessi lasciare tutto ciò che deride e lo stub che mette alla prova i progetti e ne crea di nuovi che testano l'implementazione.
Modifica
Grazie per tutta la tua risposta, penso di capirlo meglio, devo sapere qual è il mio SUT e testare che, nessun finto o stub del SUT solo i componenti che aiuteranno il SUT a superare il test