TestBase 4.0.1
See the version list below for details.
dotnet add package TestBase --version 4.0.1
NuGet\Install-Package TestBase -Version 4.0.1
<PackageReference Include="TestBase" Version="4.0.1" />
paket add TestBase --version 4.0.1
#r "nuget: TestBase, 4.0.1"
// Install TestBase as a Cake Addin #addin nuget:?package=TestBase&version=4.0.1 // Install TestBase as a Cake Tool #tool nuget:?package=TestBase&version=4.0.1
TestBase – Rich, fluent assertions and useful fakes for Mvc & AdoNet. For a flying start to Automated and Unit Testing.
TestBase.Shoulds
Chainable fluent assertions get you to the point concisely
UnitUnderTest.Action()
.ShouldNotBeNull()
.ShouldContain(expected);
UnitUnderTest.OtherAction()
.ShouldEqualByValue(
new {Id=1, Payload=expectedPayload, Additional=new[]{ expected1, expected2 }}
);
ShouldBe(), ShouldMatch(), ShouldNotBe(), ShouldContain(), ShouldNotContain(), ShouldBeEmpty(), ShouldNotBeEmpty(), ShouldAll()
and many moreShouldEqualByValue()
works with all kinds of object and collections
The TestBase-Mvc package also add assertions and helpers for testing MVC ActionResults
The TestBase.AdoNet package also adds:
TestBase.FakeDb
Works with Ado.Net and technologies on top of it, including Dapper.
fakeDbConnection.SetupForQuery(IEnumerable<TFakeData> )
fakeDbConnection.SetupForQuery(IEnumerable<Tuple<TFakeDataForTable1,TFakeDataForTable2>> )
fakeDbConnection.SetupForQuery(fakeData, new[] {""FieldName1"", FieldName2""})
fakeDbConnection.SetupForExecuteNonQuery(rowsAffected)
fakeDbConnection.ShouldHaveUpdated(""tableName"", [Optional] fieldList, whereClauseField)
fakeDbConnection.ShouldHaveSelected(""tableName"", [Optional] fieldList, whereClauseField)
fakeDbConnection.ShouldHaveUpdated(""tableName"", [Optional] fieldList, whereClauseField)
fakeDbConnection.ShouldHaveDeleted(""tableName"", whereClauseField)
fakeDbConnection.ShouldHaveInvoked(cmd => predicate(cmd))
fakeDbConnection.ShouldHaveXXX().ShouldHaveParameter(""name"", value)
fakeDbConnection.Verify(x=>x.CommandText.Matches(""Insert [case] .*"") && x.Parameters[""id""].Value==1)
TestBase.RecordingDb
new RecordingDbConnection(IDbConnection)
helps you profile Ado.Net Db calls
Latest Change: 4.0.1.0 Port to NetCore
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Microsoft.Extensions.Logging.Abstractions (>= 2.0.0)
- Mono.Linq.Expressions (>= 1.2.0)
- Newtonsoft.Json (>= 11.0.1)
- Serilog (>= 2.6.0)
- Serilog.Extensions.Logging (>= 2.0.2)
- System.ComponentModel.Annotations (>= 4.4.1)
NuGet packages (4)
Showing the top 4 NuGet packages that depend on TestBase:
Package | Downloads |
---|---|
TestBase-Mvc
*TestBase* gets you off to a flying start when unit testing projects with dependencies. TestBase-Mvc adds a rich extensible set of fluent assertions for verifying Mvc ActionResults and for easy setup of ControllerContext and HttpContext for both Mvc and WebApi TestBase.Shoulds ------------------- Chainable fluent assertions get you to the point concisely ControllerUnderTest.Action() .ShouldbeViewResult() .ShouldHaveModel<TModel>() .ShouldEqualByValue(expected) ControllerUnderTest.Action() .ShouldBeRedirectToRouteResult() .ShouldHaveRouteValue("expectedKey", [Optional] "expectedValue"); ShouldHaveViewDataContaining(), ShouldBeJsonResult() etc. TestBase ---------- Controller extensions to fake the http request & context. By injecting the RegisterRoutes method of your MvcApplication, you can use and test Controller.Url with your application's configured routes. ControllerUnderTest .WithHttpContextAndRoutes( [Optional] Action<RouteCollection> mvcApplicationRoutesRegistration, [optional] string requestUrl, [Optional] string query = "", [Optional] string appVirtualPath = "/", [Optional] HttpApplication applicationInstance) ApiControllerUnderTest.WithWebApiHttpContext<T>( HttpMethod httpMethod, [Optional] string requestUri, [Optional] string routeTemplate) |
|
TestBase.AdoNet
TestBase.AdoNet TestBase.FakeDb ------------------ Fake and verify AdoNet queries and commands ``` - fakeDbConnection.SetupForQuery(IEnumerable<TFakeData>; ) - fakeDbConnection.SetupForQuery(IEnumerable<Tuple<TFakeDataForTable1,TFakeDataForTable2>> ) - fakeDbConnection.SetupForQuery(fakeData, new[] {"FieldName1", FieldName2"}) - fakeDbConnection.SetupForExecuteNonQuery(rowsAffected) - fakeDbConnection.ShouldHaveUpdated("tableName", [Optional] fieldList, whereClauseField) - fakeDbConnection.ShouldHaveSelected("tableName", [Optional] fieldList, whereClauseField) - fakeDbConnection.ShouldHaveUpdated("tableName", [Optional] fieldList, whereClauseField) - fakeDbConnection.ShouldHaveDeleted("tableName", whereClauseField) - fakeDbConnection.ShouldHaveInvoked(cmd => predicate(cmd)) - fakeDbConnection.ShouldHaveExecutedStoredProcedure("name") - fakeDbConnection.ShouldHaveXXX().ShouldHaveParameter("name", value) - fakeDbConnection.Verify(x=>x.CommandText.Matches("Insert [case] .*") && x.Parameters["id"].Value==1) ``` TestBase.RecordingDb -------------------- * `new RecordingDbConnection(IDbConnection)` helps you profile Ado.Net Db calls See also - TestBase - TestBase.Mvc - TestBase.AdoNet - Serilog.Sinks.ListOfString - Extensions.Logging.ListOfString |
|
TestBase.Mvc.AspNetCore
*TestBase* gives you a flying start with - fluent assertions that are easy to extend - sharp error messages - tools to help you test with “heavyweight” dependencies on - AspNetCore.Mvc, AspNet.Mvc or WebApi Contexts - HttpClient - Ado.Net - Streams & Logging Chainable fluent assertions get you to the point concisely: ``` ControllerUnderTest.Action() .ShouldbeViewResult() .ShouldHaveModel<TModel>() .ShouldEqualByValue(expected, exceptForTheseFields); .Reference .ShouldMatchIgnoringCase("I expected this"); ControllerUnderTest.Action() .ShouldBeRedirectToRouteResult() .ShouldHaveRouteValue(""expectedKey"", [Optional] ""expectedValue""); ShouldHaveViewDataContaining(), ShouldBeJsonResult() etc. ``` Quickly test AspNetCore controllers with zero setup using `controllerUnderTest.WithControllerContext()` : ``` [TestFixture] public class WhenTestingControllersUsingFakeControllerContext { [Test] public void ControllerUrlAndOtherPropertiesShouldWorkAsExpected__GivenControllerContext() { var uut = new FakeController().WithControllerContext(); uut.Url.Action(""a"", ""b"").ShouldEqual(""/b/a""); uut.ControllerContext.ShouldNotBeNull(); uut.HttpContext.ShouldBe(uut.ControllerContext.HttpContext); uut.Request.ShouldNotBeNull(); uut.ViewData.ShouldNotBeNull(); uut.TempData.ShouldNotBeNull(); uut.MyAction(param) .ShouldBeViewResult() .ShouldHaveModel<YouSaidViewModel>() .YouSaid.ShouldBe(param); } [Test] public void ShouldBeAbleToUseServicesConfiguredInStartupInTests() { var moreServicesFromDI=TestServerBuilder.RunningServerUsingStartup<TStartup>().Host.ServiceProvider; var controllerUnderTest = new AController() .WithControllerContext(virtualPathTemplate:""/{Action}/Before/{Controller}""); var result= controllerUnderTest .Action(""SomeController"",""SomeAction"") .ShouldBeViewWithModel<AClass>(""ViewName""); .FooterLink .ShouldBe(""/SomeAction/Before/SomeController""); } } ``` ... Or test against complex application dependencies using `HostedMvcTestFixtureBase` and specify your `Startup` class: ``` [TestFixture] public class WhenTestingControllersUsingAspNetCoreTestTestServer : HostedMvcTestFixtureBase { [TestCase(""/dummy/action?id={id}"")] public async Task Get_Should_ReturnActionResult(string url) { var id=Guid.NewGuid(); var httpClient=GivenClientForRunningServer<Startup>(); GivenRequestHeaders(httpClient, ""CustomHeader"", ""HeaderValue1""); var result= await httpClient.GetAsync(url.Formatz(new {id})); result .ShouldBe_200Ok() .Content.ReadAsStringAsync().Result .ShouldBe(""Content""); } [TestCase(""/dummy"")] public async Task Put_Should_ReturnA(string url) { var something= new Fixture().Create<Something>(); var jsonBody= new StringContent(something.ToJSon(), Encoding.UTF8, ""application/json""); var httpClient=GivenClientForRunningServer<Startup>(); GivenRequestHeaders(httpClient, ""CustomHeader"", ""HeaderValue1""); var result = await httpClient.PutAsync(url, jsonBody); result.ShouldBe_202Accepted(); DummyController.Putted.ShouldEqualByValue( something ); } } ``` See also - TestBase - TestBase.Mvc for Mvc4 and Mvc 5 - TestBase.HttpClient.Fake - TestBase.AdoNet - Serilog.Sinks.ListOfString - Extensions.Logging.ListOfString |
|
TestBase.AspNetCore.Mvc
*TestBase* gives you a flying start with - fluent assertions that are easy to extend - sharp error messages - tools to help you test with “heavyweight” dependencies on - AspNetCore.Mvc, AspNet.Mvc or WebApi Contexts - HttpClient - Ado.Net - Streams & Logging Chainable fluent assertions get you to the point concisely: ``` ControllerUnderTest.Action() .ShouldbeViewResult() .ShouldHaveModel<TModel>() .ShouldEqualByValue(expected, exceptForTheseFields); .Reference .ShouldMatchIgnoringCase("I expected this"); ControllerUnderTest.Action() .ShouldBeRedirectToRouteResult() .ShouldHaveRouteValue(""expectedKey"", [Optional] ""expectedValue""); ShouldHaveViewDataContaining(), ShouldBeJsonResult() etc. ``` Quickly test AspNetCore controllers with zero setup using `controllerUnderTest.WithControllerContext()` : ``` [TestFixture] public class WhenTestingControllersUsingFakeControllerContext { [Test] public void ControllerUrlAndOtherPropertiesShouldWorkAsExpected__GivenControllerContext() { var uut = new FakeController().WithControllerContext(); uut.Url.Action(""a"", ""b"").ShouldEqual(""/b/a""); uut.ControllerContext.ShouldNotBeNull(); uut.HttpContext.ShouldBe(uut.ControllerContext.HttpContext); uut.Request.ShouldNotBeNull(); uut.ViewData.ShouldNotBeNull(); uut.TempData.ShouldNotBeNull(); uut.MyAction(param) .ShouldBeViewResult() .ShouldHaveModel<YouSaidViewModel>() .YouSaid.ShouldBe(param); } [Test] public void ShouldBeAbleToUseServicesConfiguredInStartupInTests() { var moreServicesFromDI=TestServerBuilder.RunningServerUsingStartup<TStartup>().Host.ServiceProvider; var controllerUnderTest = new AController() .WithControllerContext(virtualPathTemplate:""/{Action}/Before/{Controller}""); var result= controllerUnderTest .Action(""SomeController"",""SomeAction"") .ShouldBeViewWithModel<AClass>(""ViewName""); .FooterLink .ShouldBe(""/SomeAction/Before/SomeController""); } } ``` ... Or test against complex application dependencies using `HostedMvcTestFixtureBase` and specify your `Startup` class: ``` [TestFixture] public class WhenTestingControllersUsingAspNetCoreTestTestServer : HostedMvcTestFixtureBase { [TestCase(""/dummy/action?id={id}"")] public async Task Get_Should_ReturnActionResult(string url) { var id=Guid.NewGuid(); var httpClient=GivenClientForRunningServer<Startup>(); GivenRequestHeaders(httpClient, ""CustomHeader"", ""HeaderValue1""); var result= await httpClient.GetAsync(url.Formatz(new {id})); result .ShouldBe_200Ok() .Content.ReadAsStringAsync().Result .ShouldBe(""Content""); } [TestCase(""/dummy"")] public async Task Put_Should_ReturnA(string url) { var something= new Fixture().Create<Something>(); var jsonBody= new StringContent(something.ToJSon(), Encoding.UTF8, ""application/json""); var httpClient=GivenClientForRunningServer<Startup>(); GivenRequestHeaders(httpClient, ""CustomHeader"", ""HeaderValue1""); var result = await httpClient.PutAsync(url, jsonBody); result.ShouldBe_202Accepted(); DummyController.Putted.ShouldEqualByValue( something ); } } ``` See also - TestBase - TestBase.Mvc for Mvc4 and Mvc 5 - TestBase.HttpClient.Fake - TestBase.AdoNet - Serilog.Sinks.ListOfString - Extensions.Logging.ListOfString |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
6.0.0.1-preview-1 | 80 | 7/11/2024 |
4.1.4.4 | 14,240 | 7/11/2020 |
4.1.4.3 | 11,392 | 11/20/2018 |
4.1.4.1 | 7,034 | 11/16/2018 |
4.1.3.2 | 5,258 | 10/28/2018 |
4.1.3.1 | 5,125 | 10/26/2018 |
4.1.2.7 | 5,219 | 10/24/2018 |
4.1.2.4 | 5,615 | 10/16/2018 |
4.1.2.3 | 9,777 | 5/22/2018 |
4.1.2.2 | 5,462 | 5/22/2018 |
4.1.2.1 | 6,664 | 5/22/2018 |
4.1.2 | 8,342 | 5/19/2018 |
4.1.1 | 5,504 | 4/8/2018 |
4.1.0 | 5,590 | 4/3/2018 |
4.0.9.2 | 5,578 | 3/31/2018 |
4.0.9.1 | 6,292 | 3/28/2018 |
4.0.9 | 7,013 | 3/23/2018 |
4.0.8 | 5,420 | 3/23/2018 |
4.0.7 | 6,731 | 3/22/2018 |
4.0.6.2 | 7,052 | 3/9/2018 |
4.0.6.1 | 6,596 | 3/7/2018 |
4.0.5.2 | 6,700 | 3/2/2018 |
4.0.5 | 6,573 | 3/1/2018 |
4.0.4.2 | 5,296 | 3/1/2018 |
4.0.4 | 5,638 | 2/25/2018 |
4.0.3 | 5,630 | 2/25/2018 |
4.0.2 | 5,287 | 2/24/2018 |
4.0.1 | 5,678 | 2/24/2018 |
3.1.0 | 6,281 | 7/24/2016 |
3.0.8.5 | 6,051 | 7/23/2016 |
3.0.8.3 | 6,074 | 4/14/2016 |
3.0.8.2 | 6,171 | 3/31/2016 |
3.0.8.1 | 6,111 | 3/30/2016 |
3.0.8 | 6,060 | 3/29/2016 |
3.0.7.6 | 6,082 | 3/14/2016 |
3.0.7.5 | 6,074 | 3/10/2016 |
3.0.7.4 | 6,120 | 2/11/2016 |
3.0.7.3 | 6,124 | 1/29/2016 |
3.0.6.2 | 6,300 | 1/27/2016 |
3.0.6.1 | 6,146 | 1/26/2016 |
3.0.5 | 6,580 | 1/15/2016 |
3.0.4 | 6,237 | 1/13/2016 |
3.0.3 | 6,111 | 12/28/2015 |
3.0.2 | 8,572 | 12/27/2013 |
3.0.1.1 | 6,155 | 12/23/2013 |
3.0.1 | 6,381 | 11/28/2013 |
2.0.5 | 6,288 | 11/28/2013 |
2.0.4.1 | 6,113 | 11/12/2013 |
2.0.4 | 6,190 | 11/12/2013 |
2.0.3.1 | 6,109 | 11/8/2013 |
2.0.3 | 5,584 | 11/7/2013 |
2.0.2 | 5,497 | 11/7/2013 |
2.0.1 | 6,145 | 11/1/2013 |
1.0.4 | 5,514 | 10/31/2013 |
1.0.3 | 5,571 | 10/23/2013 |