I would use:
- ASP.NET MVC for url routing and page rendering (plus localization if you need it).
- Angular JS for client side development.
- ASP.NET WebApi for Ajax requests.
Business and Data Access Layers will be developed in external projects, of course in C#.
My personal tools for testing are NUnit, NSubstitute (mocking library), FluentAssertions and AutoFixture for text data generation.
Think also about using an IoC container and implement your project using dependency injection of components. I'm personally a fan of Autofac, but there are other options that you can consider.
I would also suggest you to give a look at NancyFx, a lightweight framework that can be used in place of MVC and WebApi. More information here: Benefits of using NancyFx?
To summarize the solution layout:
- One project will contain MVC and Web API controllers and angular script file
- Another project will contain the Business Layer (I prefer to call it Domain Layer)
- Another project will contain the Data Access Layer
- Each project will have a corresponding test project, following the xUnit conventions.
If you apply Inversion of Control, you can define all comunication interfaces in the domain layer and then make the UI layer and the Data Access Layer reference it.