我需要你的幫助,以便找到一種方法來驗證嵌套對象的值作爲被測試方法調用的參數傳遞。 假設這個類:FakeItEasy - 如何驗證嵌套參數值C#
public class AuditTrailValueObject
{
public ActionType Action { get; private set; }
public EntityType EntityType { get; private set; }
public long EntityId { get; private set; }
public DateTime StartTime { get; private set; }
public bool IsSuccess { get; private set; }
public string Remarks { get; private set; }
public AuditTrailValueObject(ActionType action, EntityType entityType, long entityId, DateTime startTime, bool isSuccess, string remarks = "")
{
Action = action;
EntityType = entityType;
EntityId = entityId;
StartTime = startTime;
IsSuccess = isSuccess;
Remarks = remarks;
}
}
而下面的接口有這個類作爲注入依賴性:
public interface IAuditTrailService
{
void WriteToAuditTrail(AuditTrailValueObject auditParamData);
}
現在我必須取決於AuditTrailService
的ScanService
(實現IAuditTrailService
):
public long CreateScanRequest(long projectId)
{
ScanRequestWriteModel scanRequest = _scanRequestWriteModelFactory.Create(projectDetails);
long scanRequestId = _scanRequestsWriteRepository.Insert(scanRequest);
_auditTrailService.WriteToAuditTrail(new AuditTrailValueObject(ActionType.Run, EntityType.SastScanRequest, scanRequestId, DateTime.UtcNow, true));
return scanRequestId;
}
我寫的測試:
[TestMethod]
public void Scan_GivenProjectId_ShouldAuditSuccess()
{
//Given
var projectId = 100;
var scanService = CreateScanService();
...
A.CallTo(() => _scanRequestWriteModelFactory.Create(projectDetails)).Returns(new ScanRequestWriteModel());
A.CallTo(() => _scanRequestsWriteRepository.Insert(A<ScanRequestWriteModel>._)).Returns(1);
//When
var scanRequestId = scanService.CreateScanRequest(projectId);
//Then
A.CallTo(() => _auditTrailService.WriteToAuditTrail(
new AuditTrailValueObject(ActionType.Run, EntityType.SastScanRequest, scanRequestId, A<DateTime>._, true, A<string>._))).MustHaveHappened();
}
當運行這個測試我越來越:
System.InvalidCastException:指定的轉換無效
我如何驗證AuditTrailValueObject
嵌套參數的值?
你能告訴我們錯誤發生的地方嗎?你有沒有堆棧跟蹤?任何會縮小這個範圍的東西?在這個問題中你已經拋棄了很多代碼。也許請參考https://stackoverflow.com/help/how-to-ask並重新解釋一下這個問題。 我_did_採取所有的代碼,並嘗試重現。我有一些問題,因爲有很多位被遺漏了,我不得不猜測。此外,您的測試不會編譯:我認爲你有一個重複「A.CallTo((=)_auditTrailService.WriteToAuditTrail(」行。 如果你更正這些問題並提供完整的測試輸出,我會再試一次 –
@ BlairConrad我已經修復了你注意到的錯誤行,你願意我會上傳所有錯過的行嗎(可能會更累人......) – Roni
我認爲最好的方法就是指出無效行爲的來源。 '請注意例外情況,包括整個堆棧跟蹤例外 (考慮到你已經包含的代碼量,更多的代碼並沒有那麼糟糕,我認爲要麼刪除多餘的代碼直到你有一個非常集中的例子,或包括足夠的編譯和運行。) –