Ich habe diesen Test, der überprüft, ob ich die Query() in meiner Referenz aufrufen.Unit Tests LINQ, die eine Ganzzahl
[TestFixture]
public class When_retrieving_an_application_license
{
[Test]
public void available_licenses_should_be_counted()
{
// Arrange
var sut = new LicenseManager();
var mockILicenseRepository = new Mock<ILicenseRepository>();
sut.LicenseRepository = mockILicenseRepository.Object;
// Act
sut.GetLicenseCount(Guid.NewGuid(), Guid.NewGuid());
// Assert
mockIApplicationLicenseRepository.Verify(x => x.Query());
}
}
jedoch die GetLicenseCount (Guid.NewGuid(), Guid.NewGuid()) Funktion wie folgt aussieht:
public int GetLicenseCount(Guid cId, Guid appId)
=> LicenseRepository.Query()
.Count(al => al.CId == cId && al.AppId == appId
&& al.UserId == null
&& al.Expiry > DateTime.UtcNow);
Query() liefert alle im Repo, die Benutzer-ID des zählen sind in Null. Ist es genug zu sagen, dass der Test in Ordnung ist, auch wenn es nur den query() Teil der linq verifiziert? Wie wäre es mit der Zählung?
Ich bevorzuge verschiedene Tests für verschiedene Zwecke. Wenn Sie also überprüfen, ob eine Methode oder Eigenschaft aufgerufen wurde, und überprüfen, ob der Rückgabewert korrekt ist, sollten dies zwei Tests sein. Ich würde einen zweiten Test erstellen, der den Rückgabewert bestätigt. –
Ich würde vorschlagen, Sie sollten nicht überprüfen, dass "Abfrage" überhaupt aufgerufen wird. Richten Sie Ihre Stub-Repository-Abfrage ein, um einige Werte zurückzugeben, und vergewissern Sie sich, dass Ihre Methode das Ergebnis liefert, das Sie für diese Werte erwarten würden. Testen Sie das * Verhalten *, nicht wie es implementiert ist. –
Ich stimme @CharlesMager zu. Es ist nur Zeitverschwendung, die .Query() zu testen. Denken Sie daran, es ist wie eine SQL-Abfrage in Ihrer Anwendung. Unit Testen Sie die Domain, das Verhalten in Ihren Geschäftsanforderungen. – Spock