test a C++ dll function - c++

I am trying to test a dll that was created in C++, specifically to test certain functions. A few search results gave the solution as testing in visual studio by creating a simple unit test and referencing the dll as a project. But the solution is not very clear to me and there is no way to add the dll to the unit test project, as the only options are projects, solution, shared projects. I don't even see the browse button.
Does anyone have a solution or could you explain this solution provided here? I just want to be able to call the dll function, from a C++ class or project to test the input & output.
test dll

It is pretty straight forward actually.
In the DLL project you can create a native Unit test project and write test methods.
Here is the link to clear steps with screenshots - https://learn.microsoft.com/en-us/visualstudio/test/writing-unit-tests-for-c-cpp.
Edit: I am assuming you have access to DLL code.

Related

C++ CppUnitTest changes DLL-Layout

I'm working on a C++ application with a vast amount of DLLs. Now I am trying to Unit test them with the Microsoft Visual Studio C++ Test Framework. I need to unit test the internal logic, as the DLL is rather big and only the most necessary functions are exported. So i followed this tutorial: https://learn.microsoft.com/en-us/visualstudio/test/how-to-write-unit-tests-for-cpp-dlls?view=vs-2019#sameProject and executing the tests works pretty fine but when starting the application for the next time, I figured out that the DLL did not get loaded anymore. The reason was that the DLL-Layout has been modified by the Unit Test.
Before adding the test:
After adding the test:
It's pretty clear why these methods appear, but is there
any possibility to move them to the bottom end of the dll?
any other possibility to add tests to a DLL that are able to test not exported functions without converting the .dll into a .lib?
Thanks in advance!

'Cannot reference Exe projects' and unit testing

We had a unit test project (exe, using NUnitLite) that referenced the main application to unit test code within the main application (an exe).
This used to work, but now Xamarin is giving an error that we can't reference an exe project.
Why is this?
What alternatives do people suggest for unit testing application code? It seems wrong to have to move all application code from the exe to an assembly just for the purposes of unit testing.
It looks like the feature was accidentally removed :-( Someone must have overlooked that valid, if uncommon, scenario. Please file a bug report on Xamarin.Studio and request this feature to be *re*enabled.
Until then I see two workarounds:
Build/execute the tests from a script (e.g. a Makefile). You can automate this to require less steps than using the IDE;
Add a pre-build step to your project to make a copy of the .exe and name it .dll. Then reference this copy of the assembly.

Unit test for C++ win32 application

I have to write unit tests for C++ win32 console application developed on visual studio 2010.
Previously I wrote some unit test for a C++ DLL by adding dereference to test project.
But as you know cannot reference win32 exe files to test project.
So how can I use the 'methods in my project' inside the test project? I tired by adding whole project as reference. but not success.
please some guidance?
You need to create new project and add there source files of the code that you are planning to test. This means that for your testing you will have only executable that will contain both your dev and your test code.
Other way (not really recommended) is injecting test DLL into the process and looking for entry points into the destination code from inside this dll.

Using .dlls in my projects

Hello,
Specs: VS 2010 C++ professional edition.
I have a project with some statistical functions that I want to test.
So I wrote a simple test console application which I added to the solution of the project with functions that I want to test.
Here is the detailed layout of my project:
Project BASE, contains classes with functions that are used in my statistical application called ROC. And then there is roc_test, simple console application that I want to use for testing of some functions in ROC application. Now, ROC is linked to BASE and roc_test has ROC as referenced project. My problem is that when I try to compile my test project roc_test, the compiler throws an error saying that my roc_test project is missing a .dll file that belongs to project BASE. roc_test however, is not directly linked to BASE. I don't understand why it throws such a message and how I can fix it. For the sake of clarity let me try to show the relationship in a different way.
roc_test function calls rocfit(..) function, which is part of ROC.h. ROC.h using functions that are written in DoubleMatrix.h, which is part of a BASE project.
I hope I am being clear.
P.S. There is no point in showing the code as the problem is not in the code but in the linker settings.
Thanks for any help.
EDIT: My question is how do i get rid of the error? Do I also need to link my test project to the BASE? It's just doesn't make sense that I have to do it. It should be enough to link it to ROC. Am I right?
If it's not included in the same directory as the console app (or in the path), then you'll need to include BASE as the runtime can't resolve the dependancy on BASE by ROC.
Edit: Simply referencing ROC isn't enough; although there may be some build option that builds ROC and BASE and then links them into a single DLL; that could be worth investigating.
Also, instead of using a Console application, you might find it better in the long run at using unit tests.
This msdn article explains how to use vs2010 test projects with C++:
http://msdn.microsoft.com/en-us/library/ms243171.aspx

Visual Studio C++: Unit test exe project with google test?

Using Visual Studio 2010 C++. I'm experimenting with unit testing and decided to try Google Test (gtest). I have an existing project which compiles to an MFC executable (I'm also interested in how to test a project that compiles to a DLL). My understanding of the convention for unit testing is that you should create a new separate project for your tests. So I created a new project in the same solution for my unit tests. But how do I link the projects? Can I test arbitrary functions/methods of my exe project from my test project?
What is the conventional way to do this?
I think the best way to organize unitary test is:
Don't change your main project. The structure should be independent of your test actions. In my opinion, changing your project to a big static lib AND an executable is really not elegant.
Instead, add a post build action to aggregate all obj files into a static lib file that will be used ONLY by your test project.
Create a simple test project, linking to your test framework AND the static library you have previously generated.
Enjoy.
The main advantages is you don't touch the project you want to test and you don't include all source code to your test project.
To see how you can do that for visual studio, you can see this post: Linking to multiple .obj for unit testing a console application
Either put the functionality you want to test into a static library which is linked into both your test project and your MFC project, or put your files in both projects. The first is more complicated, but the second will cause you to compile everything twice....
I have prepared a github repo including Visual Studio 2015 solution in parralel of Billy's answer. You can use it directly without any additional requirement or dependency.
https://github.com/fuatcoskun/GoogleTestVS2015
I hope it helps...