我想用NSubsitute验证以下代码:
public PkiBodyBuilder AddExtension(
DerObjectIdentifier oid,
bool critical,
Asn1Encodable value)
{
this.extensionsGenerator.AddExtension(oid, critical, value);
return this;
}
我做了
[TestMethod]
public void AddExtension_KeyUsage_OK()
{
// arrange
X509ExtensionsGenerator mockExtensionsGenerator = Substitute.For<X509ExtensionsGenerator>();
builderUnderTest.SetExtensionsGenerator(mockExtensionsGenerator );
KeyUsage keyUsage = new KeyUsage(KeyUsage.KeyCertSign | KeyUsage.CrlSign);
DerObjectIdentifier oid = X509Extensions.KeyUsage;
// act
builderUnderTest.AddExtension(oid, true, keyUsage.ToAsn1Object());
// assert
mockExtensionsGenerator.Received().AddExtension(Arg.Is<DerObjectIdentifier>(doi => oid.Equals(doi)),
Arg.Is<bool>(crit => crit),
Arg.Is<Asn1Encodable>(a1e => keyUsage.ToAsn1Object().Equals(a1e)));
}
验证AddExtensions() - 已调用内部ExteensionsGenerator的方法。 但是我在assert-Line中收到以下错误:
Testname: AddExtension_KeyUsage_OK
Test FullName: Telenot.HiXServer.TMP.PKI.AddExtension.AddExtension_KeyUsage_OK
Testquelle: D:\Projekte\hixserver\Telenot.HiXServer.TMP.Unittests\PKI\PkiBodyBuilder\AddExtension.cs Zeile 39
Testergebnis: Fehlgeschlagene
Testdauer: 0:00:00,0376248
Ergebnis StackTrace:
bei Org.BouncyCastle.Asn1.X509.X509ExtensionsGenerator.AddExtension(DerObjectIdentifier oid, Boolean critical, Asn1Encodable extValue)
bei Telenot.HiXServer.TMP.PKI.AddExtension.AddExtension_KeyUsage_OK() in D:\Projekte\hixserver\Telenot.HiXServer.TMP.Unittests\PKI\PkiBodyBuilder\AddExtension.cs:Zeile 52.
Ergebnis Meldung:
Die Telenot.HiXServer.TMP.PKI.AddExtension.AddExtension_KeyUsage_OK-Testmethode hat eine Ausnahme ausgelöst:
System.ArgumentException: error encoding value: System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
bei Org.BouncyCastle.Asn1.X509.X509ExtensionsGenerator.AddExtension(DerObjectIdentifier oid, Boolean critical, Asn1Encodable extValue)
我无法弄清楚为什么会遇到此异常。有人可以帮忙吗?调试显示mockExtensionsGenerator绝对不是null。此外,oid和keyUsage也不为空。
修改
我很清楚this SO question。然而,它并没有真正回答我的问题,因为我通过调试器检查了该行中没有任何值为空。我认为这与我对NSubstitute的使用有关,但由于我对NSubstitute很新,我看不出我可能做错了什么。