Reputation: 47743
I created a WCF Service Application project in VS 2012. Implmenented the service.
here is what it looks like:
Now I have a fundamental issue to deal with. I created a new Test project to create more TDD and also some TAD tests. The TAD (Tests after Implementation) tests will test the service implementation while my TDD test will test reliant on mocking my WCF Servcie Interface.
But now going back to my TAD tests which need to test using an implementation of the service. I take that is I'm adding a service reference and using the clientProxy in my unit tests for TAD.
So I add a service reference to a new C# Project. I then continue to create some tests such as:
[TestMethod]
public void Get_CalledViaClientProxy_ReturnsNonNullList()
{
var serviceClient = new CarsClient();
// Act
Cars[] events = serviceClient.Get();
// Assert
Assert.IsNotNull(events);
}
When I run this it fails because the actual service is not running. So what I've done is go back to the actual Service WCF project, right-click the service (.svc) and choose to open it in the browser which will also start the service under IIS Express. Then my tests run fine.
So from that, how do I make this more automated. If another dev downloads this code, those tests should run and the service should somehow be started. I tried to set my service project as the startup project but all that does is opens the browser to show me the file system for that project.
How do people run the service for testing other than in IIS? and make it so it just works for devs? If I can't get my service to run simply but pressing F5 somehow and still able to go back into my tests project to try and run unit tests then this is pointless.
When I simply try to set my "WCF Service Application" project to be the startup project, instead of just starting the service and sitting there with a console window, it opens a web page for the service. Do I have the wrong WCF project type? I noticed that I have a web tab because I've got a "Serviced Application" project, should I be using something else if I want to simply start up my project in VS and continue coding in other projects that utilize this running service?
At a previous company I was at, we all put a "-d" in the WCF service project which when you ran the project it would start the service and a console window would run and just sit there, then you knew the service was running while you continued on writing TAD unit tests against it
e.g.:
however again, my WCF project is a "WCF Application Service" so I don't have that exact debug tab in mine so not sure what to do and then how we were able to have this format of tabs in the WCF service at other places I've been. Maybe it's just a plain C# project, not a WCF project where we were putting the -d but then how was it starting the WCF service if that was the case? Not sure if it was a plain vanilla C# project that we put that -d in but I sure do not have this same tab format in my WCF Service Application project.
Update #2
Ok I just to see the diff, added a "WCF Service Library" project along side my "WCF Service Application" project. The tab now has that debug and now when I launch it it does start the service and the test client comes up because the VS template automatically has /client:"WcfTestClient.exe" in for the command line properties of the debug tab in the project properties.
Since this service is going to serve as a service API that will be used cross applications, maybe I shouldn't be using a "WCF Service Application" and should be using a "WCF Service Library" type of WCF project template.
Upvotes: 4
Views: 8661
Reputation: 1355
Refer your wcf project from the same solution as your test project.
Right click solution -> set startup projects choose multiple startup projects and change the action of your wcfservice from none to start or start without debugging. Play and test :)
Or start project without debugging, wcf service will be running and you can continue coding/building and testing.
EDIT:
Here is what you also could do;
Change your wcf project to wcf service library, make sure this project have the following config...
under debug:
Start action: Start project Start options: command line arguments: /client:"WcfTestClient.exe"
under wcf options:
Check "start wcf service host when debugging another project in the same solution"
Under solution -> startup projects, make sure you have a single startup project. This way you can debug your other projects in the solution, visual studio will ensure that your wcf service is started.
Upvotes: 2
Reputation: 2685
You can host your service in local IIS automatically by configuring project settings from Visual Studio. Then whenever you compile your WCF service, IIS hosted instance will be updated and ready to serve automatically.
Right click your WCF Service project -> Properties -> Web -> Use Local IIS Web Server and click Create Virtual Directory. Before, do not forget to turn on your IIS services feature on your machine if not.
Additionally, why dont you test your concrete service implementation only just by referencing it, you dont need to run a service and connect it to test your business.
Upvotes: 2
Reputation: 1785
Usually you put WCF service logic in some other project, let say "WCF Login Library" and you test functions on that. You don't need wcf service to test those method calls. You can then use only one method to test the connection with WCF (that's usually done manually by me).
Isn't that simpler approach?
Upvotes: 0