私はTDD開発の新人です.Nunit 3.7.1、Newtonsoft.Jsonバージョン= 10.0.3、JustMock Liteバージョン2016.2.426.1、C#、および.NET Framework 4.7。このテストではIGenericRepositoryの模擬方法
public class LoadFinishedTrzlBatch
{
private IGenericRepository<ProductionOrder> proOrdRepository;
private IGenericRepository<Batch> batchRepository;
private IGenericRepository<Code> codeRepository;
private IGenericRepository<Aggregation> aggregationRepository;
private IGenericRepository<AggregationChildren> aggChildrenRepository;
public LoadFinishedTrzlBatch(
IGenericRepository<ProductionOrder> proOrdRepository,
IGenericRepository<Batch> batchRepository,
IGenericRepository<Code> codeRepository,
IGenericRepository<Aggregation> aggregationRepository,
IGenericRepository<AggregationChildren> aggChildrenRepository)
{
this.proOrdRepository = proOrdRepository;
this.batchRepository = batchRepository;
this.codeRepository = codeRepository;
this.aggregationRepository = aggregationRepository;
this.aggChildrenRepository = aggChildrenRepository;
}
public bool ExistsProductionOrder(string productionOrderName)
{
if (string.IsNullOrWhiteSpace(productionOrderName))
throw new ArgumentNullException(nameof(productionOrderName));
return (
proOrdRepository
.SearchFor(p => p.Name == productionOrderName)
.FirstOrDefault() != null
);
}
}
:
私は、このクラスをテストしたい
[TestFixture]
class LoadFinishedTrzlBatchTest
{
private LoadFinishedTrzlBatch _load;
[SetUp]
public void SetUpLoadFinishedTrzlBatch()
{
var proOrdRepository =
Mock.Create<IGenericRepository<ProductionOrder>>();
var batchRepository =
Mock.Create<IGenericRepository<Batch>>();
var codeRepository =
Mock.Create<IGenericRepository<Code>>();
var aggRepository =
Mock.Create<IGenericRepository<Aggregation>>();
var aggChildrenRepository =
Mock.Create<IGenericRepository<AggregationChildren>>();
_load = new LoadFinishedTrzlBatch(
proOrdRepository,
batchRepository,
codeRepository,
aggRepository,
aggChildrenRepository);
}
[Test]
public void ShouldExistsProductionOrder()
{
// Arrange
Mock.Arrange(() => _load.ExistsProductionOrder("ProOrd"))
.Returns(true)
.MustBeCalled();
// Act
var actual = _load.ExistsProductionOrder("ProOrd");
// Assert
Assert.AreEqual(actual, true);
}
}
そして最後に、これはIGenericRepository
です:私はわからないんだけど、
public interface IGenericRepository<TEntity>
{
[ OMITTED ]
IQueryable<TEntity> SearchFor(Expression<Func<TEntity, bool>> predicate);
[ OMITTED ]
}
ファーストこれがメソッドLoadFinishedTrzlBatch.ExistsProductionOrder
をテストする正しい方法であれば。すべてがTDDで私にとって新しいもので、私は迷っています。
IGenericRepository<ProductionOrder>
をどのように嘲笑したのか混乱しています。常に真であり、私はIGenericRepository<ProductionOrder>
をテストしていません。たぶん私はリポジトリをテストしていないからかもしれない。
私は学んでいると私は何をやっているのかわかりません。これが私がこの質問をした理由です。私はExistsProductionOrder
メソッドをテストしたい。
ExistsProductionOrder
の方法をテストするにはどうすればよいですか?
あなたが実際にここでテストしようとしていることは本当に明確ではありません。あなたが 'ExistsProductionOrder'メソッドをテストしているなら、なぜ最初にそれを擬似したいのですか? – DavidG
私は学んでいると私は何をやっているのか分からないので。これが私がこの質問をした理由です。 'ExistsProductionOrder'メソッドをテストしたいと思います。 – VansFannel
次に、それをそのままの形(つまり嘲笑されていない)で呼び出すだけで、依存関係をモックするだけです。特に、関係する依存関係のメソッドをモックしてください。 – DavidG