-
Notifications
You must be signed in to change notification settings - Fork 473
invocation.MethodInvocationTarget
throws ArgumentNullException
for default interface method
#684
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
If I understand things correctly, then generally speaking the "target" is whatever one can
If the above assumptions are correct, then for an
@jonorossi, sorry to bother you again, but are my assumptions and conclusions correct, or am I missing some finer distinctions? |
FYI I tested this with NSubstitute 5.3.0 and Castle.Core 5.1.1 and 5.2.1 Tested with the following code: [Fact]
public void TestDefaultInterfaceImpl1()
{
// Arrange
var for1 = Substitute.For<IMyInterface>();
// Act
var message = for1.GetText();
// Assert
message.Should().Be("abc");
}
[Fact]
public void TestDefaultInterfaceImpl2()
{
// Arrange
var for1 = Substitute.For<IMyInterface>();
for1.GetText().Returns("abcd");
// Act
var message = for1.GetText();
// Assert
message.Should().Be("abcd");
}
public interface IMyInterface
{
string GetText()
{
return "abc";
}
} Castle.Core 5.1.1:
Castle.Core 5.2.1Both tests fail with:
RemarksIf we could do something in NSubstitute to fix this, please let me know.
I'm not sure as I don't know the code base that well, but it sounds correct to me |
@304NotModified, thanks for adding some more test cases to this issue, plus thinking about the meaning of those invocation properties. I'll see what I can do... but it might take a while (hopefully not another 6 months though...). |
Repro code
Expected outcome
Unless I misunderstand the meaning of
IInvocation.InvocationTarget
andIInvocation.MethodInvocationTarget
, I would expect the latter to point to a method of the former's type, if the former (IInvocation.InvocationTarget
) is non-null.Actual outcome
MethodInvocationTarget
will throw anArgumentNullException
due to the invocation'stargetType
not being set.Affected version(s)
Castle.Core starting at tag
v5.2.0
/cc @dtchepak @zvirja @alexandrnikitin – this will likely matter for NSubstitute (in https://github.com/nsubstitute/NSubstitute/blob/4d258a28aba054ea18785d36b4bdd83da023aefb/src/NSubstitute/Proxies/CastleDynamicProxy/CastleInvocationMapper.cs#L11-L16) once we've published version 5.2.0 and you upgrade to that version.
The text was updated successfully, but these errors were encountered: