У меня есть код бизнес-логики, который я хочу проверить.
На данный момент я знаю только, как написать модульный тест для логического кода, который не имеет других зависимостей.
Может кто-нибудь указать мне правильное направление, например, как протестировать эту функцию и, может быть, привести пример?
Это единственный способ проверить это интеграционный тест или мне нужно использовать mock / stub?
/// <summary>
/// Gets the scan face file by a MemberID
/// </summary>
/// <param name="MemberID">The ID of a member</param>
/// <returns>A scan face file in byte array format</returns>
public byte[] GetScanFileFaceByMemberID(int MemberID)
{
byte[] scanFileFace;
using (ProductionEntities entityContext = new ProductionEntities())
{
scanFileFace = (from scan in entityContext.tblScan
where scan.MEMBERID == MemberID
select scan.scanFileFace).Single();
}
return scanFileFace;
}
ИЗМЕНЕНИЯ (я реализовал репозиторий и макеты носорога):
BL:
public byte[] GetScanFileFaceByMemberID(int MemberID)
{
byte[] scanFileFace;
var query = Repository.GetAll<tblScan>().Where(bl => bl.MEMBERID == MemberID).Single();
scanFileFace = query.scanFileFace;
return scanFileFace;
}
Юнит-тест:
[TestMethod]
public void GetScanFileFace_ExistingScan_ReturnByteArray()
{
//Make testScan
List<tblScan> testScan = PrepareTestDataScan();
//Arrange
KlantenBL klantenBL = new KlantenBL();
klantenBL.Repository = MockRepository.GenerateMock<IRepository>();
klantenBL.Repository.Stub(bl => bl.GetAll<tblScan>()).IgnoreArguments().Return(testScan);
//Act
var result = klantenBL.GetScanFileFaceByMemberID(2);
//assert
Assert.AreEqual(result.GetType().Name, "Byte[]");
Assert.AreEqual(result.Length, 10);
}
//Prepare some testData
private List<tblScan> PrepareTestDataScan()
{
List<tblScan> scans = new List<tblScan>();
//Declare some variables
byte[] byteFile = new byte[4];
byte[] byteFile10 = new byte[10];
DateTime date = new DateTime(2012,01,01);
scans.Add(new tblScan { SCANID = 1, MEMBERID = 1, scanFileFace = byteFile, Hair = byteFile, scanFileAvatar = byteFile, scanFileMeasurements = byteFile, scanDate = date });
scans.Add(new tblScan { SCANID = 2, MEMBERID = 2, scanFileFace = byteFile10, Hair = byteFile, scanFileAvatar = byteFile, scanFileMeasurements = byteFile, scanDate = date });
scans.Add(new tblScan { SCANID = 3, MEMBERID = 3, scanFileFace = byteFile, Hair = byteFile, scanFileAvatar = byteFile, scanFileMeasurements = byteFile, scanDate = date });
return scans;
}
Repository:
public IList<T> GetAll<T>()
{
DZine_IStyling_ProductionEntities context = GetObjectContext();
IList<T> list = context
.CreateQuery<T>(
"[" + typeof(T).Name + "]")
.ToList();
ReleaseObjectContextIfNotReused();
return list;
}
public IList<T> GetAll<T>(Func<T, bool> expression)
{
DZine_IStyling_ProductionEntities context = GetObjectContext();
IList<T> list = context
.CreateQuery<T>(
"[" + typeof(T).Name + "]")
.Where(expression)
.ToList();
ReleaseObjectContextIfNotReused();
return list;
}
Это сработало отлично, спасибо всем!