Skip to content
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

PrivateObject and PrivateType are not available for a project targeting netcorapp2.0 #366

Closed
leftler opened this issue Feb 9, 2018 · 22 comments
Assignees

Comments

@leftler
Copy link

leftler commented Feb 9, 2018

Description

Currently the classes located at Microsoft.VisualStudio.QualityTools.UnitTestFramework.PrivateObject and Microsoft.VisualStudio.QualityTools.UnitTestFramework.PrivateType are only available in the /src/TestFramework/Extension.Desktop/ project, this made sense in the past because the other project types did not support the System.Reflection classes necessary to implement those two classes.

However, as of netcoreapp2.0 those projects projects have access to all the needed classes in System.Reflection. A new Extension.CoreApp project should be built, or the existing Extension.Desktop project should be moved to the new VS15 style of projects so that <targetframeworks>netcoreapp2.0;net45</targetframeworks> could be set.

Steps to reproduce

  • Create a new test project targeting netcoreapp2.0
  • Try to use the class PrivateObject

Expected behavior

PrivateObject is found and is useable

Actual behavior

PrivateObject is not available for projects referencing the assembly that was generated from Extensions.Core

@shiitake
Copy link

Just wanted to chime in that this would be a great addition to the testing framework.

@leftler
Copy link
Author

leftler commented Apr 13, 2018

@shiitake Irony, I just came back to this question today to see if there had been any updates on it because I needed to use it again. I had not even checked my email yet to see the notification of a new comment

jackson15j added a commit to jackson15j/c_sharp_random_project_for_learning that referenced this issue Jun 28, 2018
`PrivateObject` class testing appears to be broken in .NET Core 2.0. See:

* microsoft/testfx#366
@geoffhanna
Copy link

Yes. Please.

@EShafferPPG
Copy link

This is very useful and should be accessible in netcore.

@martonx
Copy link

martonx commented Oct 26, 2018

Oh, my god. Today I googling a lot, before I found this issue, that it is a known bug. But known bug for more than 8 months? Please add this functionality to .Net core tests also!

@wilsonalwaris-old
Copy link

any idea if this is ever going to happen?

@pordner
Copy link

pordner commented Apr 3, 2019

Any update on this?

@cravecode
Copy link

bump 👍

@capinredbeard
Copy link

Agreed. This would be handy. I've been beating my head against a wall trying to figure out why I couldn't use this.

@QualityRobD
Copy link

It would be great to see some love for this.

@ghost
Copy link

ghost commented Aug 24, 2019

I'm unable to finish upgrading several existing .NET Framework projects to .NET Core 2.2 because their unit tests rely on PrivateObject and PrivateType, which are conspicuously absent from MSTest.TestFramework 1.4.0.

UPDATE: PrivateObject and PrivateType are still conspicuously absent from MSTest.TestFramework 2.0.0, which was released on September 03, 2019.

@taylor-burns
Copy link

taylor-burns commented Aug 30, 2019

DO IT PLEASE. NEED 😆

@Mgamerz
Copy link

Mgamerz commented Oct 2, 2019

It is little things like this that make it hard for me to recommend moving some of our other .NET framework apps over to .net core...

@ptletski
Copy link

ptletski commented Oct 7, 2019

Please do this...

@kazken3
Copy link

kazken3 commented Nov 13, 2019

It took a lot of time to get here. Please... 🙏

@milosloub
Copy link

Any estimates on this?

@skalinets
Copy link

Personally I am glad that this hasn't been added to .NET Core / Standard. Testing of private stuff is an anti-pattern and should be avoided. However, if you absolutely cannot live without it (are doing migration of legacy stuff into .NET Core / Standard etc.), you could implement is yourself:
https://gist.github.com/skalinets/1c4e5dbb4e86bd72bf491675901de5ad

@cactuaroid
Copy link

You guys can copy the codes into your project at the moment. I'm personally using my own wrapper extension methods for PrivateObject and PrivateType, which depends on copied codes so that my NuGet package can be used on any environment (for MSTest V1/2 on .NET Framework and for MSTest/NUnit/xUnit on .NET Core).
https://github.com/cactuaroid/PrivateObjectExtensions/tree/master/PrivateObjectExtensions/testfx

@skalinets IMO, these types are not mainly used for private invoke but for mocking.

@nohwnd nohwnd self-assigned this Jan 23, 2020
@nohwnd
Copy link
Member

nohwnd commented Jan 30, 2020

We discussed this internally and decided that we don't want to introduce this pattern back into the framework.

In the attached zip file there is a single .cs that can be dropped into your test project, or a shared class library and is netstandard 2.0 compatible. The source code is a copy of this implementation.

PrivateObjectPrivateType.zip

@Astrophsica
Copy link

The following documentation has not been updated to state that PrivateObject and PrivateType is not available on .Net/Net Core projects:

Can this be updated to avoid future confusion for other devs reading Microsoft documentation?

@arunprakashn
Copy link

If this is not going to be available for the netcore, please update the documentation accordingly.

@xpl0t
Copy link

xpl0t commented Apr 27, 2022

I wrote a small extension method which enables you to call private methods 🎉 Have a look at the sample code:

class Test
{
  private string GetStr(string x, int y) => $"Success! {x} {y}";
}

var test = new Test();
var res = test.Invoke<string>("GetStr", "testparam", 123);
Console.WriteLine(res); // "Success! testparam 123"

You can find the code here: https://gist.github.com/xpl0t/0d223222696a1c92d7d23cf8368800bf

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests