Unit test for C++ win32 application - c++

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.

Related

How do I Unit Test and mock a C project in Visual Studio

I have a Project written in Visual Studio 2019 in C. I wish to Unit Test individual parts of my code and also be able to mock some functions off. What is the best way to go about this?
I have tried creating a new Unit Test Project within the same Solution as my production code, in the Native Unit Test framework for C++ in Visual Studio. The problem is I have to include my library files in every Unit Test project that I make which becomes tedious. I have tried the Fake Function Framework for C, but was unable to make it work.
I am open to new ideas, however it has to be in Visual Studio since my production code is placed in a project in Visual Studio.
Edit: A picture of my Solution Structure is shown in the picture here
I have to include the library files from my productionCode project inside my unit test project before it will build.
Not sure if this is an answer to my own question, but what I ended up doing was splitting my large project into smaller components and then write unit tests for each component instead of including library files from the large project. This way I could fake off the dependencies using the Fake Function Framework.
Thanks for the help

Visual Studio, c++: run main() in dll?

I'm building a .dll application in Visual Studio with C++. I'd like to be able to run some test code (using main() and std::cout) to the console as I write to ensure that the code actually does what it's supposed to do.
But apparently, you can only build a .dll application and not run it.
Surely there's gotta be a way around this?
Write a test driver, a real application (a dll is not an application, it's a library), that will link against your dll and that will execute your tests.
That's the usual pattern as well for Boost.test, GoogleTest and many others unit test frameworks.
(that's a big hint to use a unit test framework for what you are doing)

test a C++ dll function

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.

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...

Creating a test project

I have a solution consisting of several library project and one application project.
I want to create a separate application test project. However, my problem is how I can write test for the application project since I can't link to it? I've added the application project as a reference in "Common Properties", but I get LNK1120 probably because the application project doesn't generate a lib file to link.
How do I create a separate test project for a project with application as configuration type?
I can think of three solutions to this - none 100% as clean as I'd prefer.
Compile test code into a test library that is conditionally linked to the application program, and is driven by test input to the program. So in effect you use your own app as the test driver
Make you application a shell only and put all unit tested code in to a library that can also be linked into the test app.
same as the last one, but compile the code in the library into the app in the application build, but into the library for the test build.
The second would be my choice.