From 5e14eb66f1b29febd4d1be599e09a53fd29471db Mon Sep 17 00:00:00 2001 From: Tom Longhurst <30480171+thomhurst@users.noreply.github.com> Date: Fri, 5 Jun 2026 19:22:15 +0100 Subject: [PATCH] Add global mock default mode --- .../MockGeneratorTests.cs | 2 +- ...ing_Static_Abstract_Interface.verified.txt | 7 +- ...arameters_Extension_Discovery.verified.txt | 21 ++++- .../Class_With_Required_Members.verified.txt | 7 +- ...e_Arity_Constructor_Overloads.verified.txt | 35 +++++++-- ...s_Back_To_Generated_Namespace.verified.txt | 7 +- ...er_Static_Extension_Discovery.verified.txt | 7 +- ...Attribute_With_Concrete_Class.verified.txt | 7 +- ...Interface_Extension_Discovery.verified.txt | 7 +- ...face_With_Class_Type_Argument.verified.txt | 7 +- ...rface_With_Enum_Type_Argument.verified.txt | 7 +- ...le_Non_Builtin_Type_Arguments.verified.txt | 7 +- ..._Nested_Generic_Type_Argument.verified.txt | 7 +- ...ested_Namespace_Type_Argument.verified.txt | 7 +- ...rectly_Inheriting_IEnumerable.verified.txt | 7 +- ...entUI_Shape_Nullable_Warnings.verified.txt | 14 +++- ...nheriting_IEnumerable_Generic.verified.txt | 7 +- ...nheriting_Multiple_Interfaces.verified.txt | 7 +- ...ng_Nested_Generic_IEnumerable.verified.txt | 7 +- .../Interface_With_Async_Methods.verified.txt | 7 +- .../Interface_With_Events.verified.txt | 7 +- ..._Constraints_On_Explicit_Impl.verified.txt | 7 +- ...nterface_With_Generic_Methods.verified.txt | 7 +- ...ace_With_Keyword_Member_Names.verified.txt | 7 +- ..._With_Keyword_Parameter_Names.verified.txt | 7 +- .../Interface_With_Mixed_Members.verified.txt | 7 +- ...ltiple_Multi_Parameter_Events.verified.txt | 7 +- ...Interface_With_Nullable_Event.verified.txt | 7 +- ...lable_Event_And_Nullable_Args.verified.txt | 7 +- ...face_With_Nullable_Event_Args.verified.txt | 7 +- ...ble_Reference_Type_Parameters.verified.txt | 7 +- ...solete_DiagnosticId_NamedArgs.verified.txt | 7 +- ...terface_With_Obsolete_Members.verified.txt | 14 +++- ...rface_With_Out_Ref_Parameters.verified.txt | 7 +- ...rface_With_Overloaded_Methods.verified.txt | 7 +- .../Interface_With_Properties.verified.txt | 7 +- ...ace_With_RefStruct_Parameters.verified.txt | 7 +- ...stract_Transitive_Return_Type.verified.txt | 7 +- ...nconstrained_Nullable_Generic.verified.txt | 7 +- .../Multi_Method_Interface.verified.txt | 7 +- ...embers_From_External_Assembly.verified.txt | 7 +- ...With_Internal_Signature_Types.verified.txt | 7 +- ...Inaccessible_Property_Setters.verified.txt | 7 +- ...c_Constrained_Virtual_Methods.verified.txt | 7 +- ...lsOf_GetHashCodeOf_ToStringOf.verified.txt | 7 +- ...ple_Interface_With_One_Method.verified.txt | 7 +- ...ion_Discovery_Without_Mock_Of.verified.txt | 7 +- .../Builders/MockStaticExtensionBuilder.cs | 39 +++++++--- TUnit.Mocks.Tests/KitchenSinkConcreteTests.cs | 21 +++++ TUnit.Mocks.Tests/MockSettingsTests.cs | 77 +++++++++++++++++++ TUnit.Mocks.Tests/TUnit.Mocks.Tests.csproj | 5 ++ TUnit.Mocks/Mock.cs | 37 +++++---- TUnit.Mocks/MockExtension.cs | 9 ++- TUnit.Mocks/MockRepository.cs | 14 ++-- TUnit.Mocks/TUnit.Mocks.csproj | 1 + TUnit.Mocks/TUnitMocksSettings.cs | 29 +++++++ .../reference/programmatic-configuration.md | 11 +++ docs/docs/writing-tests/mocking/index.md | 29 ++++++- 58 files changed, 566 insertions(+), 86 deletions(-) create mode 100644 TUnit.Mocks.Tests/MockSettingsTests.cs create mode 100644 TUnit.Mocks/TUnitMocksSettings.cs diff --git a/TUnit.Mocks.SourceGenerator.Tests/MockGeneratorTests.cs b/TUnit.Mocks.SourceGenerator.Tests/MockGeneratorTests.cs index 78301989da..892f3b9940 100644 --- a/TUnit.Mocks.SourceGenerator.Tests/MockGeneratorTests.cs +++ b/TUnit.Mocks.SourceGenerator.Tests/MockGeneratorTests.cs @@ -1294,7 +1294,7 @@ void M() AssertContains( generated, "public static global::Microsoft.Extensions.Configuration.IConfigurationMock Mock" - + "(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose)"); + + "(global::TUnit.Mocks.MockBehavior behavior)"); return VerifyGeneratorOutput(source, [externalRef]); } diff --git a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Class_Implementing_Static_Abstract_Interface.verified.txt b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Class_Implementing_Static_Abstract_Interface.verified.txt index 56117654e9..f618402b99 100644 --- a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Class_Implementing_Static_Abstract_Interface.verified.txt +++ b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Class_Implementing_Static_Abstract_Interface.verified.txt @@ -127,7 +127,12 @@ namespace TUnit.Mocks { extension(global::StaticAbstractImpl _) { - public static global::TUnit.Mocks.Mock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::TUnit.Mocks.Mock Mock() + { + return global::TUnit.Mocks.Mock.Of(); + } + + public static global::TUnit.Mocks.Mock Mock(global::TUnit.Mocks.MockBehavior behavior) { return global::TUnit.Mocks.Mock.Of(behavior); } diff --git a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Class_With_Constructor_Parameters_Extension_Discovery.verified.txt b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Class_With_Constructor_Parameters_Extension_Discovery.verified.txt index da19864d9e..2dd2a21ab0 100644 --- a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Class_With_Constructor_Parameters_Extension_Discovery.verified.txt +++ b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Class_With_Constructor_Parameters_Extension_Discovery.verified.txt @@ -164,17 +164,32 @@ namespace TUnit.Mocks { extension(global::MyService _) { - public static global::TUnit.Mocks.Mock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::TUnit.Mocks.Mock Mock() + { + return global::TUnit.Mocks.Mock.Of(); + } + + public static global::TUnit.Mocks.Mock Mock(global::TUnit.Mocks.MockBehavior behavior) { return global::TUnit.Mocks.Mock.Of(behavior); } - public static global::TUnit.Mocks.Mock Mock(string connectionString, int timeout, global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::TUnit.Mocks.Mock Mock(string connectionString, int timeout) + { + return global::TUnit.Mocks.Mock.Of(connectionString, timeout); + } + + public static global::TUnit.Mocks.Mock Mock(string connectionString, int timeout, global::TUnit.Mocks.MockBehavior behavior) { return global::TUnit.Mocks.Mock.Of(behavior, connectionString, timeout); } - public static global::TUnit.Mocks.Mock Mock(string connectionString, int timeout, bool verbose, global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::TUnit.Mocks.Mock Mock(string connectionString, int timeout, bool verbose) + { + return global::TUnit.Mocks.Mock.Of(connectionString, timeout, verbose); + } + + public static global::TUnit.Mocks.Mock Mock(string connectionString, int timeout, bool verbose, global::TUnit.Mocks.MockBehavior behavior) { return global::TUnit.Mocks.Mock.Of(behavior, connectionString, timeout, verbose); } diff --git a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Class_With_Required_Members.verified.txt b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Class_With_Required_Members.verified.txt index 303d11b09a..4574ddfb25 100644 --- a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Class_With_Required_Members.verified.txt +++ b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Class_With_Required_Members.verified.txt @@ -109,7 +109,12 @@ namespace TUnit.Mocks { extension(global::ConfigBase _) { - public static global::TUnit.Mocks.Mock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::TUnit.Mocks.Mock Mock() + { + return global::TUnit.Mocks.Mock.Of(); + } + + public static global::TUnit.Mocks.Mock Mock(global::TUnit.Mocks.MockBehavior behavior) { return global::TUnit.Mocks.Mock.Of(behavior); } diff --git a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Class_With_Same_Arity_Constructor_Overloads.verified.txt b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Class_With_Same_Arity_Constructor_Overloads.verified.txt index 399af5e97e..8b48363896 100644 --- a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Class_With_Same_Arity_Constructor_Overloads.verified.txt +++ b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Class_With_Same_Arity_Constructor_Overloads.verified.txt @@ -173,27 +173,52 @@ namespace TUnit.Mocks { extension(global::MyService _) { - public static global::TUnit.Mocks.Mock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::TUnit.Mocks.Mock Mock() + { + return global::TUnit.Mocks.Mock.Of(); + } + + public static global::TUnit.Mocks.Mock Mock(global::TUnit.Mocks.MockBehavior behavior) { return global::TUnit.Mocks.Mock.Of(behavior); } - public static global::TUnit.Mocks.Mock Mock(string name, global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::TUnit.Mocks.Mock Mock(string name) + { + return global::TUnit.Mocks.Mock.Of(name); + } + + public static global::TUnit.Mocks.Mock Mock(string name, global::TUnit.Mocks.MockBehavior behavior) { return global::TUnit.Mocks.Mock.Of(behavior, name); } - public static global::TUnit.Mocks.Mock Mock(int id, global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::TUnit.Mocks.Mock Mock(int id) + { + return global::TUnit.Mocks.Mock.Of(id); + } + + public static global::TUnit.Mocks.Mock Mock(int id, global::TUnit.Mocks.MockBehavior behavior) { return global::TUnit.Mocks.Mock.Of(behavior, id); } - public static global::TUnit.Mocks.Mock Mock(string host, int port, global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::TUnit.Mocks.Mock Mock(string host, int port) + { + return global::TUnit.Mocks.Mock.Of(host, port); + } + + public static global::TUnit.Mocks.Mock Mock(string host, int port, global::TUnit.Mocks.MockBehavior behavior) { return global::TUnit.Mocks.Mock.Of(behavior, host, port); } - public static global::TUnit.Mocks.Mock Mock(int timeout, bool verbose, global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::TUnit.Mocks.Mock Mock(int timeout, bool verbose) + { + return global::TUnit.Mocks.Mock.Of(timeout, verbose); + } + + public static global::TUnit.Mocks.Mock Mock(int timeout, bool verbose, global::TUnit.Mocks.MockBehavior behavior) { return global::TUnit.Mocks.Mock.Of(behavior, timeout, verbose); } diff --git a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Conflict_With_Existing_Type_Falls_Back_To_Generated_Namespace.verified.txt b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Conflict_With_Existing_Type_Falls_Back_To_Generated_Namespace.verified.txt index f40a12bdd0..1e57ab71da 100644 --- a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Conflict_With_Existing_Type_Falls_Back_To_Generated_Namespace.verified.txt +++ b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Conflict_With_Existing_Type_Falls_Back_To_Generated_Namespace.verified.txt @@ -251,7 +251,12 @@ namespace TUnit.Mocks { extension(global::MyApp.IGreeter _) { - public static global::TUnit.Mocks.Generated.MyApp.IGreeterMock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::TUnit.Mocks.Generated.MyApp.IGreeterMock Mock() + { + return (global::TUnit.Mocks.Generated.MyApp.IGreeterMock)global::TUnit.Mocks.Generated.MyApp.IGreeterMockFactory.CreateAutoMock(global::TUnit.Mocks.Mock.DefaultBehavior); + } + + public static global::TUnit.Mocks.Generated.MyApp.IGreeterMock Mock(global::TUnit.Mocks.MockBehavior behavior) { return (global::TUnit.Mocks.Generated.MyApp.IGreeterMock)global::TUnit.Mocks.Generated.MyApp.IGreeterMockFactory.CreateAutoMock(behavior); } diff --git a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/External_Interface_With_Indexer_Static_Extension_Discovery.verified.txt b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/External_Interface_With_Indexer_Static_Extension_Discovery.verified.txt index 4779a279b6..3d56e5e65f 100644 --- a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/External_Interface_With_Indexer_Static_Extension_Discovery.verified.txt +++ b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/External_Interface_With_Indexer_Static_Extension_Discovery.verified.txt @@ -271,7 +271,12 @@ namespace TUnit.Mocks { extension(global::Microsoft.Extensions.Configuration.IConfiguration _) { - public static global::Microsoft.Extensions.Configuration.IConfigurationMock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::Microsoft.Extensions.Configuration.IConfigurationMock Mock() + { + return (global::Microsoft.Extensions.Configuration.IConfigurationMock)global::Microsoft.Extensions.Configuration.IConfigurationMockFactory.CreateAutoMock(global::TUnit.Mocks.Mock.DefaultBehavior); + } + + public static global::Microsoft.Extensions.Configuration.IConfigurationMock Mock(global::TUnit.Mocks.MockBehavior behavior) { return (global::Microsoft.Extensions.Configuration.IConfigurationMock)global::Microsoft.Extensions.Configuration.IConfigurationMockFactory.CreateAutoMock(behavior); } diff --git a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/GenerateMock_Attribute_With_Concrete_Class.verified.txt b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/GenerateMock_Attribute_With_Concrete_Class.verified.txt index 04c80bd9f2..4f831259ed 100644 --- a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/GenerateMock_Attribute_With_Concrete_Class.verified.txt +++ b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/GenerateMock_Attribute_With_Concrete_Class.verified.txt @@ -139,7 +139,12 @@ namespace TUnit.Mocks { extension(global::MyService _) { - public static global::TUnit.Mocks.Mock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::TUnit.Mocks.Mock Mock() + { + return global::TUnit.Mocks.Mock.Of(); + } + + public static global::TUnit.Mocks.Mock Mock(global::TUnit.Mocks.MockBehavior behavior) { return global::TUnit.Mocks.Mock.Of(behavior); } diff --git a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Generic_Interface_Extension_Discovery.verified.txt b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Generic_Interface_Extension_Discovery.verified.txt index a60dc683a2..71dfd868e5 100644 --- a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Generic_Interface_Extension_Discovery.verified.txt +++ b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Generic_Interface_Extension_Discovery.verified.txt @@ -339,7 +339,12 @@ namespace TUnit.Mocks { extension(global::IRepository _) { - public static global::IRepository_T_Mock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::IRepository_T_Mock Mock() + { + return (global::IRepository_T_Mock)global::IRepository_T_MockFactory.CreateAutoMock(global::TUnit.Mocks.Mock.DefaultBehavior); + } + + public static global::IRepository_T_Mock Mock(global::TUnit.Mocks.MockBehavior behavior) { return (global::IRepository_T_Mock)global::IRepository_T_MockFactory.CreateAutoMock(behavior); } diff --git a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Generic_Interface_With_Class_Type_Argument.verified.txt b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Generic_Interface_With_Class_Type_Argument.verified.txt index e6f53978db..f6ab726593 100644 --- a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Generic_Interface_With_Class_Type_Argument.verified.txt +++ b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Generic_Interface_With_Class_Type_Argument.verified.txt @@ -251,7 +251,12 @@ namespace TUnit.Mocks { extension(global::Sandbox.IFoo _) { - public static global::Sandbox.IFoo_T_Mock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::Sandbox.IFoo_T_Mock Mock() + { + return (global::Sandbox.IFoo_T_Mock)global::Sandbox.IFoo_T_MockFactory.CreateAutoMock(global::TUnit.Mocks.Mock.DefaultBehavior); + } + + public static global::Sandbox.IFoo_T_Mock Mock(global::TUnit.Mocks.MockBehavior behavior) { return (global::Sandbox.IFoo_T_Mock)global::Sandbox.IFoo_T_MockFactory.CreateAutoMock(behavior); } diff --git a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Generic_Interface_With_Enum_Type_Argument.verified.txt b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Generic_Interface_With_Enum_Type_Argument.verified.txt index 7c5e5f0e94..3401d77cca 100644 --- a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Generic_Interface_With_Enum_Type_Argument.verified.txt +++ b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Generic_Interface_With_Enum_Type_Argument.verified.txt @@ -148,7 +148,12 @@ namespace TUnit.Mocks { extension(global::Sandbox.IFoo _) { - public static global::Sandbox.IFoo_T_Mock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::Sandbox.IFoo_T_Mock Mock() + { + return (global::Sandbox.IFoo_T_Mock)global::Sandbox.IFoo_T_MockFactory.CreateAutoMock(global::TUnit.Mocks.Mock.DefaultBehavior); + } + + public static global::Sandbox.IFoo_T_Mock Mock(global::TUnit.Mocks.MockBehavior behavior) { return (global::Sandbox.IFoo_T_Mock)global::Sandbox.IFoo_T_MockFactory.CreateAutoMock(behavior); } diff --git a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Generic_Interface_With_Multiple_Non_Builtin_Type_Arguments.verified.txt b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Generic_Interface_With_Multiple_Non_Builtin_Type_Arguments.verified.txt index f815e708c7..334ffd6e87 100644 --- a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Generic_Interface_With_Multiple_Non_Builtin_Type_Arguments.verified.txt +++ b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Generic_Interface_With_Multiple_Non_Builtin_Type_Arguments.verified.txt @@ -245,7 +245,12 @@ namespace TUnit.Mocks { extension(global::Sandbox.IMapper _) { - public static global::Sandbox.IMapper_TIn_TOut_Mock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::Sandbox.IMapper_TIn_TOut_Mock Mock() + { + return (global::Sandbox.IMapper_TIn_TOut_Mock)global::Sandbox.IMapper_TIn_TOut_MockFactory.CreateAutoMock(global::TUnit.Mocks.Mock.DefaultBehavior); + } + + public static global::Sandbox.IMapper_TIn_TOut_Mock Mock(global::TUnit.Mocks.MockBehavior behavior) { return (global::Sandbox.IMapper_TIn_TOut_Mock)global::Sandbox.IMapper_TIn_TOut_MockFactory.CreateAutoMock(behavior); } diff --git a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Generic_Interface_With_Nested_Generic_Type_Argument.verified.txt b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Generic_Interface_With_Nested_Generic_Type_Argument.verified.txt index 0cbac0b8d9..f7f2fcd47f 100644 --- a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Generic_Interface_With_Nested_Generic_Type_Argument.verified.txt +++ b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Generic_Interface_With_Nested_Generic_Type_Argument.verified.txt @@ -148,7 +148,12 @@ namespace TUnit.Mocks { extension(global::Sandbox.IProvider _) { - public static global::Sandbox.IProvider_T_Mock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::Sandbox.IProvider_T_Mock Mock() + { + return (global::Sandbox.IProvider_T_Mock)global::Sandbox.IProvider_T_MockFactory.CreateAutoMock(global::TUnit.Mocks.Mock.DefaultBehavior); + } + + public static global::Sandbox.IProvider_T_Mock Mock(global::TUnit.Mocks.MockBehavior behavior) { return (global::Sandbox.IProvider_T_Mock)global::Sandbox.IProvider_T_MockFactory.CreateAutoMock(behavior); } diff --git a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Generic_Interface_With_Nested_Namespace_Type_Argument.verified.txt b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Generic_Interface_With_Nested_Namespace_Type_Argument.verified.txt index 0ccb05bf4d..6f6fa5d14f 100644 --- a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Generic_Interface_With_Nested_Namespace_Type_Argument.verified.txt +++ b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Generic_Interface_With_Nested_Namespace_Type_Argument.verified.txt @@ -251,7 +251,12 @@ namespace TUnit.Mocks { extension(global::Sandbox.IService _) { - public static global::Sandbox.IService_T_Mock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::Sandbox.IService_T_Mock Mock() + { + return (global::Sandbox.IService_T_Mock)global::Sandbox.IService_T_MockFactory.CreateAutoMock(global::TUnit.Mocks.Mock.DefaultBehavior); + } + + public static global::Sandbox.IService_T_Mock Mock(global::TUnit.Mocks.MockBehavior behavior) { return (global::Sandbox.IService_T_Mock)global::Sandbox.IService_T_MockFactory.CreateAutoMock(behavior); } diff --git a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_Directly_Inheriting_IEnumerable.verified.txt b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_Directly_Inheriting_IEnumerable.verified.txt index 3820d604f5..b50482b645 100644 --- a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_Directly_Inheriting_IEnumerable.verified.txt +++ b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_Directly_Inheriting_IEnumerable.verified.txt @@ -265,7 +265,12 @@ namespace TUnit.Mocks { extension(global::ICustomCollection _) { - public static global::ICustomCollectionMock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::ICustomCollectionMock Mock() + { + return (global::ICustomCollectionMock)global::ICustomCollectionMockFactory.CreateAutoMock(global::TUnit.Mocks.Mock.DefaultBehavior); + } + + public static global::ICustomCollectionMock Mock(global::TUnit.Mocks.MockBehavior behavior) { return (global::ICustomCollectionMock)global::ICustomCollectionMockFactory.CreateAutoMock(behavior); } diff --git a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_FluentUI_Shape_Nullable_Warnings.verified.txt b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_FluentUI_Shape_Nullable_Warnings.verified.txt index cd02b18ef1..ff5c3697bd 100644 --- a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_FluentUI_Shape_Nullable_Warnings.verified.txt +++ b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_FluentUI_Shape_Nullable_Warnings.verified.txt @@ -234,7 +234,12 @@ namespace TUnit.Mocks { extension(global::IDialogReference _) { - public static global::IDialogReferenceMock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::IDialogReferenceMock Mock() + { + return (global::IDialogReferenceMock)global::IDialogReferenceMockFactory.CreateAutoMock(global::TUnit.Mocks.Mock.DefaultBehavior); + } + + public static global::IDialogReferenceMock Mock(global::TUnit.Mocks.MockBehavior behavior) { return (global::IDialogReferenceMock)global::IDialogReferenceMockFactory.CreateAutoMock(behavior); } @@ -755,7 +760,12 @@ namespace TUnit.Mocks { extension(global::IDialogService _) { - public static global::IDialogServiceMock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::IDialogServiceMock Mock() + { + return (global::IDialogServiceMock)global::IDialogServiceMockFactory.CreateAutoMock(global::TUnit.Mocks.Mock.DefaultBehavior); + } + + public static global::IDialogServiceMock Mock(global::TUnit.Mocks.MockBehavior behavior) { return (global::IDialogServiceMock)global::IDialogServiceMockFactory.CreateAutoMock(behavior); } diff --git a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_Inheriting_IEnumerable_Generic.verified.txt b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_Inheriting_IEnumerable_Generic.verified.txt index b787edede1..330622a061 100644 --- a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_Inheriting_IEnumerable_Generic.verified.txt +++ b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_Inheriting_IEnumerable_Generic.verified.txt @@ -143,7 +143,12 @@ namespace TUnit.Mocks { extension(global::ITestEnum _) { - public static global::ITestEnum_T_Mock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::ITestEnum_T_Mock Mock() + { + return (global::ITestEnum_T_Mock)global::ITestEnum_T_MockFactory.CreateAutoMock(global::TUnit.Mocks.Mock.DefaultBehavior); + } + + public static global::ITestEnum_T_Mock Mock(global::TUnit.Mocks.MockBehavior behavior) { return (global::ITestEnum_T_Mock)global::ITestEnum_T_MockFactory.CreateAutoMock(behavior); } diff --git a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_Inheriting_Multiple_Interfaces.verified.txt b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_Inheriting_Multiple_Interfaces.verified.txt index a7942fb781..0c4193e525 100644 --- a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_Inheriting_Multiple_Interfaces.verified.txt +++ b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_Inheriting_Multiple_Interfaces.verified.txt @@ -264,7 +264,12 @@ namespace TUnit.Mocks { extension(global::IReadWriter _) { - public static global::IReadWriterMock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::IReadWriterMock Mock() + { + return (global::IReadWriterMock)global::IReadWriterMockFactory.CreateAutoMock(global::TUnit.Mocks.Mock.DefaultBehavior); + } + + public static global::IReadWriterMock Mock(global::TUnit.Mocks.MockBehavior behavior) { return (global::IReadWriterMock)global::IReadWriterMockFactory.CreateAutoMock(behavior); } diff --git a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_Inheriting_Nested_Generic_IEnumerable.verified.txt b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_Inheriting_Nested_Generic_IEnumerable.verified.txt index 94ee439399..a042e2a3ea 100644 --- a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_Inheriting_Nested_Generic_IEnumerable.verified.txt +++ b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_Inheriting_Nested_Generic_IEnumerable.verified.txt @@ -166,7 +166,12 @@ namespace TUnit.Mocks { extension(global::IPagedResult _) { - public static global::IPagedResult_T_Mock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::IPagedResult_T_Mock Mock() + { + return (global::IPagedResult_T_Mock)global::IPagedResult_T_MockFactory.CreateAutoMock(global::TUnit.Mocks.Mock.DefaultBehavior); + } + + public static global::IPagedResult_T_Mock Mock(global::TUnit.Mocks.MockBehavior behavior) { return (global::IPagedResult_T_Mock)global::IPagedResult_T_MockFactory.CreateAutoMock(behavior); } diff --git a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Async_Methods.verified.txt b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Async_Methods.verified.txt index 0a70ee893b..64cbe4e038 100644 --- a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Async_Methods.verified.txt +++ b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Async_Methods.verified.txt @@ -621,7 +621,12 @@ namespace TUnit.Mocks { extension(global::IAsyncService _) { - public static global::IAsyncServiceMock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::IAsyncServiceMock Mock() + { + return (global::IAsyncServiceMock)global::IAsyncServiceMockFactory.CreateAutoMock(global::TUnit.Mocks.Mock.DefaultBehavior); + } + + public static global::IAsyncServiceMock Mock(global::TUnit.Mocks.MockBehavior behavior) { return (global::IAsyncServiceMock)global::IAsyncServiceMockFactory.CreateAutoMock(behavior); } diff --git a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Events.verified.txt b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Events.verified.txt index 76d4edd9d0..e968f71229 100644 --- a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Events.verified.txt +++ b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Events.verified.txt @@ -297,7 +297,12 @@ namespace TUnit.Mocks { extension(global::INotifier _) { - public static global::INotifierMock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::INotifierMock Mock() + { + return (global::INotifierMock)global::INotifierMockFactory.CreateAutoMock(global::TUnit.Mocks.Mock.DefaultBehavior); + } + + public static global::INotifierMock Mock(global::TUnit.Mocks.MockBehavior behavior) { return (global::INotifierMock)global::INotifierMockFactory.CreateAutoMock(behavior); } diff --git a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Generic_Method_Constraints_On_Explicit_Impl.verified.txt b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Generic_Method_Constraints_On_Explicit_Impl.verified.txt index 85d1ce7d42..9fc5ba493d 100644 --- a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Generic_Method_Constraints_On_Explicit_Impl.verified.txt +++ b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Generic_Method_Constraints_On_Explicit_Impl.verified.txt @@ -309,7 +309,12 @@ namespace TUnit.Mocks { extension(global::IConstrained _) { - public static global::IConstrainedMock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::IConstrainedMock Mock() + { + return (global::IConstrainedMock)global::IConstrainedMockFactory.CreateAutoMock(global::TUnit.Mocks.Mock.DefaultBehavior); + } + + public static global::IConstrainedMock Mock(global::TUnit.Mocks.MockBehavior behavior) { return (global::IConstrainedMock)global::IConstrainedMockFactory.CreateAutoMock(behavior); } diff --git a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Generic_Methods.verified.txt b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Generic_Methods.verified.txt index 8939dd7054..7c856b70b5 100644 --- a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Generic_Methods.verified.txt +++ b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Generic_Methods.verified.txt @@ -461,7 +461,12 @@ namespace TUnit.Mocks { extension(global::IRepository _) { - public static global::IRepositoryMock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::IRepositoryMock Mock() + { + return (global::IRepositoryMock)global::IRepositoryMockFactory.CreateAutoMock(global::TUnit.Mocks.Mock.DefaultBehavior); + } + + public static global::IRepositoryMock Mock(global::TUnit.Mocks.MockBehavior behavior) { return (global::IRepositoryMock)global::IRepositoryMockFactory.CreateAutoMock(behavior); } diff --git a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Keyword_Member_Names.verified.txt b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Keyword_Member_Names.verified.txt index ed1f297e36..5f71f51487 100644 --- a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Keyword_Member_Names.verified.txt +++ b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Keyword_Member_Names.verified.txt @@ -393,7 +393,12 @@ namespace TUnit.Mocks { extension(global::IEscapedNames _) { - public static global::IEscapedNamesMock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::IEscapedNamesMock Mock() + { + return (global::IEscapedNamesMock)global::IEscapedNamesMockFactory.CreateAutoMock(global::TUnit.Mocks.Mock.DefaultBehavior); + } + + public static global::IEscapedNamesMock Mock(global::TUnit.Mocks.MockBehavior behavior) { return (global::IEscapedNamesMock)global::IEscapedNamesMockFactory.CreateAutoMock(behavior); } diff --git a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Keyword_Parameter_Names.verified.txt b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Keyword_Parameter_Names.verified.txt index 6f2dba30f9..51a46afb7a 100644 --- a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Keyword_Parameter_Names.verified.txt +++ b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Keyword_Parameter_Names.verified.txt @@ -367,7 +367,12 @@ namespace TUnit.Mocks { extension(global::ITest _) { - public static global::ITestMock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::ITestMock Mock() + { + return (global::ITestMock)global::ITestMockFactory.CreateAutoMock(global::TUnit.Mocks.Mock.DefaultBehavior); + } + + public static global::ITestMock Mock(global::TUnit.Mocks.MockBehavior behavior) { return (global::ITestMock)global::ITestMockFactory.CreateAutoMock(behavior); } diff --git a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Mixed_Members.verified.txt b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Mixed_Members.verified.txt index a9aa55f165..b6f5d8c320 100644 --- a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Mixed_Members.verified.txt +++ b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Mixed_Members.verified.txt @@ -459,7 +459,12 @@ namespace TUnit.Mocks { extension(global::IService _) { - public static global::IServiceMock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::IServiceMock Mock() + { + return (global::IServiceMock)global::IServiceMockFactory.CreateAutoMock(global::TUnit.Mocks.Mock.DefaultBehavior); + } + + public static global::IServiceMock Mock(global::TUnit.Mocks.MockBehavior behavior) { return (global::IServiceMock)global::IServiceMockFactory.CreateAutoMock(behavior); } diff --git a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Multiple_Multi_Parameter_Events.verified.txt b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Multiple_Multi_Parameter_Events.verified.txt index be2e6d2cdb..771a1ba220 100644 --- a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Multiple_Multi_Parameter_Events.verified.txt +++ b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Multiple_Multi_Parameter_Events.verified.txt @@ -234,7 +234,12 @@ namespace TUnit.Mocks { extension(global::IDualEvents _) { - public static global::IDualEventsMock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::IDualEventsMock Mock() + { + return (global::IDualEventsMock)global::IDualEventsMockFactory.CreateAutoMock(global::TUnit.Mocks.Mock.DefaultBehavior); + } + + public static global::IDualEventsMock Mock(global::TUnit.Mocks.MockBehavior behavior) { return (global::IDualEventsMock)global::IDualEventsMockFactory.CreateAutoMock(behavior); } diff --git a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Nullable_Event.verified.txt b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Nullable_Event.verified.txt index e8d6fa04a3..5980a462c9 100644 --- a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Nullable_Event.verified.txt +++ b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Nullable_Event.verified.txt @@ -191,7 +191,12 @@ namespace TUnit.Mocks { extension(global::IFoo _) { - public static global::IFooMock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::IFooMock Mock() + { + return (global::IFooMock)global::IFooMockFactory.CreateAutoMock(global::TUnit.Mocks.Mock.DefaultBehavior); + } + + public static global::IFooMock Mock(global::TUnit.Mocks.MockBehavior behavior) { return (global::IFooMock)global::IFooMockFactory.CreateAutoMock(behavior); } diff --git a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Nullable_Event_And_Nullable_Args.verified.txt b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Nullable_Event_And_Nullable_Args.verified.txt index 122e0613e3..452eb94b56 100644 --- a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Nullable_Event_And_Nullable_Args.verified.txt +++ b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Nullable_Event_And_Nullable_Args.verified.txt @@ -191,7 +191,12 @@ namespace TUnit.Mocks { extension(global::IFoo _) { - public static global::IFooMock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::IFooMock Mock() + { + return (global::IFooMock)global::IFooMockFactory.CreateAutoMock(global::TUnit.Mocks.Mock.DefaultBehavior); + } + + public static global::IFooMock Mock(global::TUnit.Mocks.MockBehavior behavior) { return (global::IFooMock)global::IFooMockFactory.CreateAutoMock(behavior); } diff --git a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Nullable_Event_Args.verified.txt b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Nullable_Event_Args.verified.txt index 2358bda7f8..be9f29ca35 100644 --- a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Nullable_Event_Args.verified.txt +++ b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Nullable_Event_Args.verified.txt @@ -191,7 +191,12 @@ namespace TUnit.Mocks { extension(global::IFoo _) { - public static global::IFooMock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::IFooMock Mock() + { + return (global::IFooMock)global::IFooMockFactory.CreateAutoMock(global::TUnit.Mocks.Mock.DefaultBehavior); + } + + public static global::IFooMock Mock(global::TUnit.Mocks.MockBehavior behavior) { return (global::IFooMock)global::IFooMockFactory.CreateAutoMock(behavior); } diff --git a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Nullable_Reference_Type_Parameters.verified.txt b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Nullable_Reference_Type_Parameters.verified.txt index 2835e0e26c..9be4701b75 100644 --- a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Nullable_Reference_Type_Parameters.verified.txt +++ b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Nullable_Reference_Type_Parameters.verified.txt @@ -673,7 +673,12 @@ namespace TUnit.Mocks { extension(global::IFoo _) { - public static global::IFooMock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::IFooMock Mock() + { + return (global::IFooMock)global::IFooMockFactory.CreateAutoMock(global::TUnit.Mocks.Mock.DefaultBehavior); + } + + public static global::IFooMock Mock(global::TUnit.Mocks.MockBehavior behavior) { return (global::IFooMock)global::IFooMockFactory.CreateAutoMock(behavior); } diff --git a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Obsolete_DiagnosticId_NamedArgs.verified.txt b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Obsolete_DiagnosticId_NamedArgs.verified.txt index 5dbdd0fd62..8ca582ef99 100644 --- a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Obsolete_DiagnosticId_NamedArgs.verified.txt +++ b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Obsolete_DiagnosticId_NamedArgs.verified.txt @@ -147,7 +147,12 @@ namespace TUnit.Mocks { extension(global::IDeprecatedApi _) { - public static global::IDeprecatedApiMock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::IDeprecatedApiMock Mock() + { + return (global::IDeprecatedApiMock)global::IDeprecatedApiMockFactory.CreateAutoMock(global::TUnit.Mocks.Mock.DefaultBehavior); + } + + public static global::IDeprecatedApiMock Mock(global::TUnit.Mocks.MockBehavior behavior) { return (global::IDeprecatedApiMock)global::IDeprecatedApiMockFactory.CreateAutoMock(behavior); } diff --git a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Obsolete_Members.verified.txt b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Obsolete_Members.verified.txt index 0a0aca8097..d3388600c8 100644 --- a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Obsolete_Members.verified.txt +++ b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Obsolete_Members.verified.txt @@ -222,7 +222,12 @@ namespace TUnit.Mocks { extension(global::BaseDialog _) { - public static global::TUnit.Mocks.Mock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::TUnit.Mocks.Mock Mock() + { + return global::TUnit.Mocks.Mock.Of(); + } + + public static global::TUnit.Mocks.Mock Mock(global::TUnit.Mocks.MockBehavior behavior) { return global::TUnit.Mocks.Mock.Of(behavior); } @@ -834,7 +839,12 @@ namespace TUnit.Mocks { extension(global::IDialogService _) { - public static global::IDialogServiceMock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::IDialogServiceMock Mock() + { + return (global::IDialogServiceMock)global::IDialogServiceMockFactory.CreateAutoMock(global::TUnit.Mocks.Mock.DefaultBehavior); + } + + public static global::IDialogServiceMock Mock(global::TUnit.Mocks.MockBehavior behavior) { return (global::IDialogServiceMock)global::IDialogServiceMockFactory.CreateAutoMock(behavior); } diff --git a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Out_Ref_Parameters.verified.txt b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Out_Ref_Parameters.verified.txt index 4e535452f7..19549d5189 100644 --- a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Out_Ref_Parameters.verified.txt +++ b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Out_Ref_Parameters.verified.txt @@ -359,7 +359,12 @@ namespace TUnit.Mocks { extension(global::IDictionary _) { - public static global::IDictionaryMock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::IDictionaryMock Mock() + { + return (global::IDictionaryMock)global::IDictionaryMockFactory.CreateAutoMock(global::TUnit.Mocks.Mock.DefaultBehavior); + } + + public static global::IDictionaryMock Mock(global::TUnit.Mocks.MockBehavior behavior) { return (global::IDictionaryMock)global::IDictionaryMockFactory.CreateAutoMock(behavior); } diff --git a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Overloaded_Methods.verified.txt b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Overloaded_Methods.verified.txt index d9f0a4f1ee..7bd2db411c 100644 --- a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Overloaded_Methods.verified.txt +++ b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Overloaded_Methods.verified.txt @@ -634,7 +634,12 @@ namespace TUnit.Mocks { extension(global::IFormatter _) { - public static global::IFormatterMock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::IFormatterMock Mock() + { + return (global::IFormatterMock)global::IFormatterMockFactory.CreateAutoMock(global::TUnit.Mocks.Mock.DefaultBehavior); + } + + public static global::IFormatterMock Mock(global::TUnit.Mocks.MockBehavior behavior) { return (global::IFormatterMock)global::IFormatterMockFactory.CreateAutoMock(behavior); } diff --git a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Properties.verified.txt b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Properties.verified.txt index ceaca05373..dad8692069 100644 --- a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Properties.verified.txt +++ b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Properties.verified.txt @@ -166,7 +166,12 @@ namespace TUnit.Mocks { extension(global::IRepository _) { - public static global::IRepositoryMock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::IRepositoryMock Mock() + { + return (global::IRepositoryMock)global::IRepositoryMockFactory.CreateAutoMock(global::TUnit.Mocks.Mock.DefaultBehavior); + } + + public static global::IRepositoryMock Mock(global::TUnit.Mocks.MockBehavior behavior) { return (global::IRepositoryMock)global::IRepositoryMockFactory.CreateAutoMock(behavior); } diff --git a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_RefStruct_Parameters.verified.txt b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_RefStruct_Parameters.verified.txt index 8180c0ea3f..524f773e53 100644 --- a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_RefStruct_Parameters.verified.txt +++ b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_RefStruct_Parameters.verified.txt @@ -200,7 +200,12 @@ namespace TUnit.Mocks { extension(global::IBufferProcessor _) { - public static global::IBufferProcessorMock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::IBufferProcessorMock Mock() + { + return (global::IBufferProcessorMock)global::IBufferProcessorMockFactory.CreateAutoMock(global::TUnit.Mocks.Mock.DefaultBehavior); + } + + public static global::IBufferProcessorMock Mock(global::TUnit.Mocks.MockBehavior behavior) { return (global::IBufferProcessorMock)global::IBufferProcessorMockFactory.CreateAutoMock(behavior); } diff --git a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Static_Abstract_Transitive_Return_Type.verified.txt b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Static_Abstract_Transitive_Return_Type.verified.txt index 8a9a383860..309c1c2d5f 100644 --- a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Static_Abstract_Transitive_Return_Type.verified.txt +++ b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Static_Abstract_Transitive_Return_Type.verified.txt @@ -261,7 +261,12 @@ namespace TUnit.Mocks { extension(global::IMyService _) { - public static global::IMyServiceMock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::IMyServiceMock Mock() + { + return (global::IMyServiceMock)global::IMyServiceMockFactory.CreateAutoMock(global::TUnit.Mocks.Mock.DefaultBehavior); + } + + public static global::IMyServiceMock Mock(global::TUnit.Mocks.MockBehavior behavior) { return (global::IMyServiceMock)global::IMyServiceMockFactory.CreateAutoMock(behavior); } diff --git a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Unconstrained_Nullable_Generic.verified.txt b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Unconstrained_Nullable_Generic.verified.txt index 9e9bc109ed..256a11ce65 100644 --- a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Unconstrained_Nullable_Generic.verified.txt +++ b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Interface_With_Unconstrained_Nullable_Generic.verified.txt @@ -260,7 +260,12 @@ namespace TUnit.Mocks { extension(global::IFoo _) { - public static global::IFooMock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::IFooMock Mock() + { + return (global::IFooMock)global::IFooMockFactory.CreateAutoMock(global::TUnit.Mocks.Mock.DefaultBehavior); + } + + public static global::IFooMock Mock(global::TUnit.Mocks.MockBehavior behavior) { return (global::IFooMock)global::IFooMockFactory.CreateAutoMock(behavior); } diff --git a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Multi_Method_Interface.verified.txt b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Multi_Method_Interface.verified.txt index f924d214ac..6e46cd9347 100644 --- a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Multi_Method_Interface.verified.txt +++ b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Multi_Method_Interface.verified.txt @@ -408,7 +408,12 @@ namespace TUnit.Mocks { extension(global::ICalculator _) { - public static global::ICalculatorMock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::ICalculatorMock Mock() + { + return (global::ICalculatorMock)global::ICalculatorMockFactory.CreateAutoMock(global::TUnit.Mocks.Mock.DefaultBehavior); + } + + public static global::ICalculatorMock Mock(global::TUnit.Mocks.MockBehavior behavior) { return (global::ICalculatorMock)global::ICalculatorMockFactory.CreateAutoMock(behavior); } diff --git a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Partial_Mock_Filters_Internal_Virtual_Members_From_External_Assembly.verified.txt b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Partial_Mock_Filters_Internal_Virtual_Members_From_External_Assembly.verified.txt index 76f13b1ebc..8c3045c884 100644 --- a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Partial_Mock_Filters_Internal_Virtual_Members_From_External_Assembly.verified.txt +++ b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Partial_Mock_Filters_Internal_Virtual_Members_From_External_Assembly.verified.txt @@ -267,7 +267,12 @@ namespace TUnit.Mocks { extension(global::ExternalLib.ExternalClient _) { - public static global::TUnit.Mocks.Mock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::TUnit.Mocks.Mock Mock() + { + return global::TUnit.Mocks.Mock.Of(); + } + + public static global::TUnit.Mocks.Mock Mock(global::TUnit.Mocks.MockBehavior behavior) { return global::TUnit.Mocks.Mock.Of(behavior); } diff --git a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Partial_Mock_Filters_Members_With_Internal_Signature_Types.verified.txt b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Partial_Mock_Filters_Members_With_Internal_Signature_Types.verified.txt index 6b5275b108..c1913c36c6 100644 --- a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Partial_Mock_Filters_Members_With_Internal_Signature_Types.verified.txt +++ b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Partial_Mock_Filters_Members_With_Internal_Signature_Types.verified.txt @@ -227,7 +227,12 @@ namespace TUnit.Mocks { extension(global::ExternalLib.ServiceClient _) { - public static global::TUnit.Mocks.Mock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::TUnit.Mocks.Mock Mock() + { + return global::TUnit.Mocks.Mock.Of(); + } + + public static global::TUnit.Mocks.Mock Mock(global::TUnit.Mocks.MockBehavior behavior) { return global::TUnit.Mocks.Mock.Of(behavior); } diff --git a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Partial_Mock_Omits_Inaccessible_Property_Setters.verified.txt b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Partial_Mock_Omits_Inaccessible_Property_Setters.verified.txt index 1c10a25fd8..3602901dda 100644 --- a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Partial_Mock_Omits_Inaccessible_Property_Setters.verified.txt +++ b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Partial_Mock_Omits_Inaccessible_Property_Setters.verified.txt @@ -170,7 +170,12 @@ namespace TUnit.Mocks { extension(global::ExternalLib.ExternalResponse _) { - public static global::TUnit.Mocks.Mock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::TUnit.Mocks.Mock Mock() + { + return global::TUnit.Mocks.Mock.Of(); + } + + public static global::TUnit.Mocks.Mock Mock(global::TUnit.Mocks.MockBehavior behavior) { return global::TUnit.Mocks.Mock.Of(behavior); } diff --git a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Partial_Mock_With_Generic_Constrained_Virtual_Methods.verified.txt b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Partial_Mock_With_Generic_Constrained_Virtual_Methods.verified.txt index d1f42be3f4..f7e00390ba 100644 --- a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Partial_Mock_With_Generic_Constrained_Virtual_Methods.verified.txt +++ b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Partial_Mock_With_Generic_Constrained_Virtual_Methods.verified.txt @@ -452,7 +452,12 @@ namespace TUnit.Mocks { extension(global::BaseService _) { - public static global::TUnit.Mocks.Mock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::TUnit.Mocks.Mock Mock() + { + return global::TUnit.Mocks.Mock.Of(); + } + + public static global::TUnit.Mocks.Mock Mock(global::TUnit.Mocks.MockBehavior behavior) { return global::TUnit.Mocks.Mock.Of(behavior); } diff --git a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/SelfEquatable_Generates_EqualsOf_GetHashCodeOf_ToStringOf.verified.txt b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/SelfEquatable_Generates_EqualsOf_GetHashCodeOf_ToStringOf.verified.txt index 1e972c0dcb..630d2da3cf 100644 --- a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/SelfEquatable_Generates_EqualsOf_GetHashCodeOf_ToStringOf.verified.txt +++ b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/SelfEquatable_Generates_EqualsOf_GetHashCodeOf_ToStringOf.verified.txt @@ -363,7 +363,12 @@ namespace TUnit.Mocks { extension(global::SelfEquatableSnapshot _) { - public static global::TUnit.Mocks.Mock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::TUnit.Mocks.Mock Mock() + { + return global::TUnit.Mocks.Mock.Of(); + } + + public static global::TUnit.Mocks.Mock Mock(global::TUnit.Mocks.MockBehavior behavior) { return global::TUnit.Mocks.Mock.Of(behavior); } diff --git a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Simple_Interface_With_One_Method.verified.txt b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Simple_Interface_With_One_Method.verified.txt index bc78a82a59..7328f81fd2 100644 --- a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Simple_Interface_With_One_Method.verified.txt +++ b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Simple_Interface_With_One_Method.verified.txt @@ -242,7 +242,12 @@ namespace TUnit.Mocks { extension(global::IGreeter _) { - public static global::IGreeterMock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::IGreeterMock Mock() + { + return (global::IGreeterMock)global::IGreeterMockFactory.CreateAutoMock(global::TUnit.Mocks.Mock.DefaultBehavior); + } + + public static global::IGreeterMock Mock(global::TUnit.Mocks.MockBehavior behavior) { return (global::IGreeterMock)global::IGreeterMockFactory.CreateAutoMock(behavior); } diff --git a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Static_Extension_Discovery_Without_Mock_Of.verified.txt b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Static_Extension_Discovery_Without_Mock_Of.verified.txt index 5237aaa69e..89bc500d52 100644 --- a/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Static_Extension_Discovery_Without_Mock_Of.verified.txt +++ b/TUnit.Mocks.SourceGenerator.Tests/Snapshots/Static_Extension_Discovery_Without_Mock_Of.verified.txt @@ -248,7 +248,12 @@ namespace TUnit.Mocks { extension(global::INotifier _) { - public static global::INotifierMock Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose) + public static global::INotifierMock Mock() + { + return (global::INotifierMock)global::INotifierMockFactory.CreateAutoMock(global::TUnit.Mocks.Mock.DefaultBehavior); + } + + public static global::INotifierMock Mock(global::TUnit.Mocks.MockBehavior behavior) { return (global::INotifierMock)global::INotifierMockFactory.CreateAutoMock(behavior); } diff --git a/TUnit.Mocks.SourceGenerator/Builders/MockStaticExtensionBuilder.cs b/TUnit.Mocks.SourceGenerator/Builders/MockStaticExtensionBuilder.cs index 3fcfb15736..d8e6bfe2ca 100644 --- a/TUnit.Mocks.SourceGenerator/Builders/MockStaticExtensionBuilder.cs +++ b/TUnit.Mocks.SourceGenerator/Builders/MockStaticExtensionBuilder.cs @@ -16,12 +16,19 @@ public static string Build(MockTypeModel model) return BuildCore(model, (writer, mockableType, visibility) => { - using (writer.Block($"{visibility} static {globalPrefix}{MockImplBuilder.GetGeneratedTypeName($"{shortName}Mock", model)} Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose)")) + var generatedMockType = $"{globalPrefix}{MockImplBuilder.GetGeneratedTypeName($"{shortName}Mock", model)}"; + var factoryType = $"{globalPrefix}{shortName}MockFactory"; + var typeArguments = MockImplBuilder.GetTypeParameterList(model); + + using (writer.Block($"{visibility} static {generatedMockType} Mock()")) { - var generatedMockType = $"{globalPrefix}{MockImplBuilder.GetGeneratedTypeName($"{shortName}Mock", model)}"; - var factoryType = $"{globalPrefix}{shortName}MockFactory"; - var typeArguments = MockImplBuilder.GetTypeParameterList(model); + writer.AppendLine($"return ({generatedMockType}){factoryType}.CreateAutoMock{typeArguments}(global::TUnit.Mocks.Mock.DefaultBehavior);"); + } + writer.AppendLine(); + + using (writer.Block($"{visibility} static {generatedMockType} Mock(global::TUnit.Mocks.MockBehavior behavior)")) + { writer.AppendLine($"return ({generatedMockType}){factoryType}.CreateAutoMock{typeArguments}(behavior);"); } }); @@ -34,7 +41,14 @@ public static string BuildForPartialMock(MockTypeModel model) { return BuildCore(model, (writer, mockableType, visibility) => { - using (writer.Block($"{visibility} static global::TUnit.Mocks.Mock<{mockableType}> Mock(global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose)")) + using (writer.Block($"{visibility} static global::TUnit.Mocks.Mock<{mockableType}> Mock()")) + { + writer.AppendLine($"return global::TUnit.Mocks.Mock.Of<{mockableType}>();"); + } + + writer.AppendLine(); + + using (writer.Block($"{visibility} static global::TUnit.Mocks.Mock<{mockableType}> Mock(global::TUnit.Mocks.MockBehavior behavior)")) { writer.AppendLine($"return global::TUnit.Mocks.Mock.Of<{mockableType}>(behavior);"); } @@ -50,14 +64,21 @@ public static string BuildForPartialMock(MockTypeModel model) writer.AppendLine(); - var paramList = string.Join(", ", - ctor.Parameters.Select(FormatParameter) - .Append($"global::TUnit.Mocks.MockBehavior behavior = global::TUnit.Mocks.MockBehavior.Loose")); + var parameterListWithoutBehavior = string.Join(", ", ctor.Parameters.Select(FormatParameter)); + var parameterListWithBehavior = string.Join(", ", + ctor.Parameters.Select(FormatParameter).Append("global::TUnit.Mocks.MockBehavior behavior")); var argList = string.Join(", ", ctor.Parameters.Select(p => p.Name)); - using (writer.Block($"{visibility} static global::TUnit.Mocks.Mock<{mockableType}> Mock({paramList})")) + using (writer.Block($"{visibility} static global::TUnit.Mocks.Mock<{mockableType}> Mock({parameterListWithoutBehavior})")) + { + writer.AppendLine($"return global::TUnit.Mocks.Mock.Of<{mockableType}>({argList});"); + } + + writer.AppendLine(); + + using (writer.Block($"{visibility} static global::TUnit.Mocks.Mock<{mockableType}> Mock({parameterListWithBehavior})")) { writer.AppendLine($"return global::TUnit.Mocks.Mock.Of<{mockableType}>(behavior, {argList});"); } diff --git a/TUnit.Mocks.Tests/KitchenSinkConcreteTests.cs b/TUnit.Mocks.Tests/KitchenSinkConcreteTests.cs index 1e44d48fe4..0bb7c87643 100644 --- a/TUnit.Mocks.Tests/KitchenSinkConcreteTests.cs +++ b/TUnit.Mocks.Tests/KitchenSinkConcreteTests.cs @@ -1,3 +1,4 @@ +using Microsoft.Extensions.Configuration; using TUnit.Mocks; using TUnit.Mocks.Arguments; using TUnit.Mocks.Verification; @@ -515,4 +516,24 @@ public async Task Class_With_Explicit_Interface_Impl_Compiles_And_Inherits_Impl( await Assert.That(mock.Object.Describe()).IsEqualTo("mocked"); mock.Describe().WasCalled(Times.Exactly(2)); } + + public class MyService + { + public IConfiguration Configuration { get; } + + public MyService(IConfiguration configuration) + { + Configuration = configuration; + } + } + + + [Test] + public async Task IConfiguration_Param_Mock() + { + var configuration = IConfiguration.Mock(); + var service = new MyService(configuration); + + await Assert.That(service.Configuration).IsEqualTo(configuration); + } } diff --git a/TUnit.Mocks.Tests/MockSettingsTests.cs b/TUnit.Mocks.Tests/MockSettingsTests.cs new file mode 100644 index 0000000000..029050c4e3 --- /dev/null +++ b/TUnit.Mocks.Tests/MockSettingsTests.cs @@ -0,0 +1,77 @@ +using TUnit.Mocks.Exceptions; + +namespace TUnit.Mocks.Tests; + +[NotInParallel] +public class MockSettingsTests +{ + private MockBehavior _savedDefaultMode; + + [Before(HookType.Test)] + public void SnapshotSettings() + { + _savedDefaultMode = TUnitMocksSettings.Default.DefaultMode; + } + + [After(HookType.Test)] + public void RestoreSettings() + { + TUnitMocksSettings.Default.DefaultMode = _savedDefaultMode; + } + + [Test] + public async Task Default_Mode_Is_Loose() + { + await Assert.That(TUnitMocksSettings.Default.DefaultMode).IsEqualTo(MockBehavior.Loose); + } + + [Test] + public async Task Default_Mode_Applies_To_Parameterless_Mock_Factories() + { + TUnitMocksSettings.Default.DefaultMode = MockBehavior.Strict; + + var extensionMock = ICalculator.Mock(); + var staticMock = Mock.Of(); + var repositoryMock = new MockRepository().Of(); + + await Assert.That(Mock.Behavior(extensionMock)).IsEqualTo(MockBehavior.Strict); + await Assert.That(Mock.Behavior(staticMock)).IsEqualTo(MockBehavior.Strict); + await Assert.That(Mock.Behavior(repositoryMock)).IsEqualTo(MockBehavior.Strict); + } + + [Test] + public async Task Explicit_Behavior_Overrides_Default_Mode() + { + TUnitMocksSettings.Default.DefaultMode = MockBehavior.Strict; + + var mock = ICalculator.Mock(MockBehavior.Loose); + + mock.Object.Add(1, 2); + + await Assert.That(Mock.Behavior(mock)).IsEqualTo(MockBehavior.Loose); + } + + [Test] + public async Task Strict_Default_Mode_Throws_For_Unconfigured_Calls() + { + TUnitMocksSettings.Default.DefaultMode = MockBehavior.Strict; + + var mock = ICalculator.Mock(); + + var exception = Assert.Throws(() => mock.Object.Add(1, 2)); + + await Assert.That(exception.UnconfiguredCall).Contains("Add"); + } + + [Test] + public async Task Repository_Default_Mode_Is_Resolved_When_Mock_Is_Created() + { + var repository = new MockRepository(); + + TUnitMocksSettings.Default.DefaultMode = MockBehavior.Strict; + + var mock = repository.Of(); + + await Assert.That(Mock.Behavior(mock)).IsEqualTo(MockBehavior.Strict); + } +} diff --git a/TUnit.Mocks.Tests/TUnit.Mocks.Tests.csproj b/TUnit.Mocks.Tests/TUnit.Mocks.Tests.csproj index bf7bfbf27b..be73cb8d06 100644 --- a/TUnit.Mocks.Tests/TUnit.Mocks.Tests.csproj +++ b/TUnit.Mocks.Tests/TUnit.Mocks.Tests.csproj @@ -8,6 +8,11 @@ true + + true + ..\strongname.snk + + diff --git a/TUnit.Mocks/Mock.cs b/TUnit.Mocks/Mock.cs index 9266771935..5977e20146 100644 --- a/TUnit.Mocks/Mock.cs +++ b/TUnit.Mocks/Mock.cs @@ -1,3 +1,4 @@ +using System.ComponentModel; using TUnit.Mocks.Diagnostics; using TUnit.Mocks.Verification; @@ -8,6 +9,14 @@ namespace TUnit.Mocks; /// public static class Mock { + /// Current default behavior used by parameterless mock factory APIs. + /// + /// Hidden from IntelliSense because user code should configure this through + /// context.Settings.Mocks.DefaultMode; generated code and factory APIs use this as the runtime lookup. + /// + [EditorBrowsable(EditorBrowsableState.Never)] + public static MockBehavior DefaultBehavior => TUnitMocksSettings.Default.DefaultMode; + /// /// Retrieves the wrapper for a mock implementation object. /// Use this to access the mock wrapper from auto-mocked return values or any mocked object. @@ -38,8 +47,8 @@ public static Mock Get(T mockedObject) where T : class $"Mock.Get can only be used with objects created by Mock.Of, auto-mocking, or other Mock factory methods."); } - /// Creates a mock of T in loose mode. - public static Mock Of() where T : class => Of(MockBehavior.Loose); + /// Creates a mock of T using the configured default behavior. + public static Mock Of() where T : class => Of(DefaultBehavior); /// Creates a mock of T with specified behavior and custom default value provider. public static Mock Of(MockBehavior behavior, IDefaultValueProvider defaultValueProvider) where T : class @@ -53,9 +62,9 @@ public static Mock Of(MockBehavior behavior, IDefaultValueProvider default public static Mock Of(MockBehavior behavior) where T : class => Of(behavior, Array.Empty()); - /// Creates a mock of T in loose mode, optionally passing constructor arguments for concrete classes. + /// Creates a mock of T using the configured default behavior, optionally passing constructor arguments for concrete classes. public static Mock Of(params object[] constructorArgs) where T : class - => Of(MockBehavior.Loose, constructorArgs); + => Of(DefaultBehavior, constructorArgs); /// Creates a mock of T with specified behavior, optionally passing constructor arguments for concrete classes. public static Mock Of(MockBehavior behavior, params object[] constructorArgs) where T : class @@ -70,12 +79,12 @@ public static Mock Of(MockBehavior behavior, params object[] constructorAr $"Ensure the TUnit.Mocks source generator is referenced in your project."); } - /// Creates a delegate mock of T in loose mode. + /// Creates a delegate mock of T using the configured default behavior. /// /// Delegate parameters with out modifiers will always receive default values. /// Use interface mocks for full out parameter configuration support. /// - public static Mock OfDelegate() where T : class => OfDelegate(MockBehavior.Loose); + public static Mock OfDelegate() where T : class => OfDelegate(DefaultBehavior); /// Creates a delegate mock of T with specified behavior. /// @@ -94,8 +103,8 @@ public static Mock OfDelegate(MockBehavior behavior) where T : class $"Ensure the TUnit.Mocks source generator is referenced and the type is a delegate type."); } - /// Creates a wrap mock around an existing instance of T in loose mode. - public static Mock Wrap(T instance) where T : class => Wrap(MockBehavior.Loose, instance); + /// Creates a wrap mock around an existing instance of T using the configured default behavior. + public static Mock Wrap(T instance) where T : class => Wrap(DefaultBehavior, instance); /// Creates a wrap mock around an existing instance of T with specified behavior. public static Mock Wrap(MockBehavior behavior, T instance) where T : class @@ -110,10 +119,10 @@ public static Mock Wrap(MockBehavior behavior, T instance) where T : class $"Ensure the TUnit.Mocks source generator is referenced and the type is a non-sealed class with virtual members."); } - /// Creates a mock implementing both T1 and T2 in loose mode. + /// Creates a mock implementing both T1 and T2 using the configured default behavior. public static Mock Of() where T1 : class where T2 : class - => Of(MockBehavior.Loose); + => Of(DefaultBehavior); /// Creates a mock implementing both T1 and T2 with specified behavior. public static Mock Of(MockBehavior behavior) @@ -130,10 +139,10 @@ public static Mock Of(MockBehavior behavior) $"Ensure the TUnit.Mocks source generator is referenced in your project."); } - /// Creates a mock implementing T1, T2, and T3 in loose mode. + /// Creates a mock implementing T1, T2, and T3 using the configured default behavior. public static Mock Of() where T1 : class where T2 : class where T3 : class - => Of(MockBehavior.Loose); + => Of(DefaultBehavior); /// Creates a mock implementing T1, T2, and T3 with specified behavior. public static Mock Of(MockBehavior behavior) @@ -150,10 +159,10 @@ public static Mock Of(MockBehavior behavior) $"Ensure the TUnit.Mocks source generator is referenced in your project."); } - /// Creates a mock implementing T1, T2, T3, and T4 in loose mode. + /// Creates a mock implementing T1, T2, T3, and T4 using the configured default behavior. public static Mock Of() where T1 : class where T2 : class where T3 : class where T4 : class - => Of(MockBehavior.Loose); + => Of(DefaultBehavior); /// Creates a mock implementing T1, T2, T3, and T4 with specified behavior. public static Mock Of(MockBehavior behavior) diff --git a/TUnit.Mocks/MockExtension.cs b/TUnit.Mocks/MockExtension.cs index fecc76b218..e1a4401039 100644 --- a/TUnit.Mocks/MockExtension.cs +++ b/TUnit.Mocks/MockExtension.cs @@ -17,7 +17,14 @@ public static class MockExtension /// will prefer it over this generic fallback. /// [OverloadResolutionPriority(-1)] - public static Mock Mock(MockBehavior behavior = MockBehavior.Loose) + public static Mock Mock() + => TUnit.Mocks.Mock.Of(); + + /// + /// Creates a mock of with the specified behavior. + /// + [OverloadResolutionPriority(-1)] + public static Mock Mock(MockBehavior behavior) => TUnit.Mocks.Mock.Of(behavior); } } diff --git a/TUnit.Mocks/MockRepository.cs b/TUnit.Mocks/MockRepository.cs index c99a2e56cf..12f938f130 100644 --- a/TUnit.Mocks/MockRepository.cs +++ b/TUnit.Mocks/MockRepository.cs @@ -6,12 +6,14 @@ namespace TUnit.Mocks; /// public class MockRepository { - private readonly MockBehavior _defaultBehavior; + private readonly MockBehavior? _defaultBehavior; private readonly List _mocks = new(); private readonly Lock _lock = new(); - /// Creates a repository with as the default behavior. - public MockRepository() : this(MockBehavior.Loose) { } + /// Creates a repository with the configured mock default behavior. + public MockRepository() + { + } /// Creates a repository with the specified default behavior for all mocks created through it. public MockRepository(MockBehavior defaultBehavior) @@ -20,7 +22,7 @@ public MockRepository(MockBehavior defaultBehavior) } /// Creates and tracks a mock of T using the repository's default behavior. - public Mock Of() where T : class => Of(_defaultBehavior); + public Mock Of() where T : class => Of(EffectiveBehavior); /// Creates and tracks a mock of T with the specified behavior. public Mock Of(MockBehavior behavior) where T : class @@ -28,7 +30,7 @@ public Mock Of(MockBehavior behavior) where T : class /// Creates and tracks a mock of T using the repository's default behavior, optionally passing constructor arguments for concrete classes. public Mock Of(params object[] constructorArgs) where T : class - => Of(_defaultBehavior, constructorArgs); + => Of(EffectiveBehavior, constructorArgs); /// Creates and tracks a mock of T with the specified behavior, optionally passing constructor arguments for concrete classes. public Mock Of(MockBehavior behavior, params object[] constructorArgs) where T : class @@ -129,4 +131,6 @@ private IMock[] GetSnapshot() return _mocks.ToArray(); } } + + private MockBehavior EffectiveBehavior => _defaultBehavior ?? Mock.DefaultBehavior; } diff --git a/TUnit.Mocks/TUnit.Mocks.csproj b/TUnit.Mocks/TUnit.Mocks.csproj index 106df21a1c..c9ae56c48e 100644 --- a/TUnit.Mocks/TUnit.Mocks.csproj +++ b/TUnit.Mocks/TUnit.Mocks.csproj @@ -10,6 +10,7 @@ + diff --git a/TUnit.Mocks/TUnitMocksSettings.cs b/TUnit.Mocks/TUnitMocksSettings.cs new file mode 100644 index 0000000000..74d88c805e --- /dev/null +++ b/TUnit.Mocks/TUnitMocksSettings.cs @@ -0,0 +1,29 @@ +using TUnit.Core.Settings; + +namespace TUnit.Mocks; + +public static class TUnitMocksSettingsExtensions +{ + extension(TUnitSettings _) + { + // TUnit.Mocks cannot add instance state to TUnitSettings, so package settings live in this singleton. + public TUnitMocksSettings Mocks => TUnitMocksSettings.Default; + } +} + +public class TUnitMocksSettings +{ + internal static readonly TUnitMocksSettings Default = new(); + + internal TUnitMocksSettings() + { + } + + /// + /// Default behavior used when creating mocks without an explicit . + /// + /// + /// Configure this during test discovery, before tests create mocks. + /// + public MockBehavior DefaultMode { get; set; } = MockBehavior.Loose; +} diff --git a/docs/docs/reference/programmatic-configuration.md b/docs/docs/reference/programmatic-configuration.md index 266cc7f75b..d2c9bb70d8 100644 --- a/docs/docs/reference/programmatic-configuration.md +++ b/docs/docs/reference/programmatic-configuration.md @@ -14,6 +14,7 @@ Settings are organized into logical groups: - `Parallelism` — concurrent test execution limits - `Execution` — runtime behavior such as fail-fast - `Display` — output and display options +- `Mocks` — defaults for TUnit.Mocks when the package is referenced ## Usage @@ -21,6 +22,7 @@ Set values inside a `[Before(HookType.TestDiscovery)]` hook so they are applied ```csharp using TUnit.Core; +using TUnit.Mocks; public class TestSetup { @@ -30,6 +32,7 @@ public class TestSetup context.Settings.Timeouts.DefaultTestTimeout = TimeSpan.FromMinutes(5); context.Settings.Timeouts.DefaultHookTimeout = TimeSpan.FromMinutes(2); context.Settings.Execution.FailFast = true; + context.Settings.Mocks.DefaultMode = MockBehavior.Strict; return Task.CompletedTask; } @@ -69,6 +72,14 @@ Settings are accessed exclusively through `context.Settings` in the discovery ho |---|---|---|---| | `FailFast` | `bool` | `false` | Cancels the remaining test run after the first test failure. | +### `context.Settings.Mocks` + +Available when `TUnit.Mocks` is referenced. + +| Property | Type | Default | Description | +|---|---|---|---| +| `DefaultMode` | `MockBehavior` | `MockBehavior.Loose` | Default behavior for mocks created without an explicit mode. Set to `MockBehavior.Strict` to make unconfigured calls throw by default. | + ## Precedence When the same setting is configured in multiple places, the following priority order applies (highest wins): diff --git a/docs/docs/writing-tests/mocking/index.md b/docs/docs/writing-tests/mocking/index.md index d25915f526..bb19531365 100644 --- a/docs/docs/writing-tests/mocking/index.md +++ b/docs/docs/writing-tests/mocking/index.md @@ -4,9 +4,9 @@ sidebar_position: 1 # TUnit.Mocks -TUnit.Mocks is a **standalone, source-generated, AOT-compatible** mocking framework. Because mocks are generated at compile time, it works with Native AOT, trimming, and single-file publishing — unlike traditional mocking libraries that rely on runtime proxy generation. +TUnit.Mocks is a **source-generated, AOT-compatible** mocking framework. Because mocks are generated at compile time, it works with Native AOT, trimming, and single-file publishing — unlike traditional mocking libraries that rely on runtime proxy generation. -While it integrates seamlessly with TUnit's assertion engine, TUnit.Mocks has **no dependency on the TUnit test framework** and works with any test runner — xUnit, NUnit, MSTest, or no framework at all. +While it integrates seamlessly with TUnit's assertion engine, TUnit.Mocks does **not require the TUnit test runner** and works with any test runner — xUnit, NUnit, MSTest, or no framework at all. ## Installation @@ -88,6 +88,31 @@ var loose = IService.Mock(); // loose (default) var strict = IService.Mock(MockBehavior.Strict); // throws on unconfigured calls ``` +### Global Default Mode + +In TUnit test projects, you can change the default mode for all mocks that are created without an explicit `MockBehavior`: + +```csharp +using TUnit.Core; +using TUnit.Mocks; + +public class GlobalSetup +{ + [Before(HookType.TestDiscovery)] + public static void Configure(BeforeTestDiscoveryContext context) + { + context.Settings.Mocks.DefaultMode = MockBehavior.Strict; + } +} +``` + +With this setting, `IService.Mock()`, `Mock.Of()`, `Mock.Wrap(instance)`, `Mock.OfDelegate()`, and `new MockRepository()` use strict mode by default. Passing a `MockBehavior` still overrides the global default: + +```csharp +var strict = IService.Mock(); // uses global strict default +var loose = IService.Mock(MockBehavior.Loose); // explicit override +``` + ### The Mock Wrapper `T.Mock()` returns a `Mock` wrapper (for interfaces, a generated subclass that also implements the interface). Extension methods are generated directly on `Mock` for each member of the mocked type, and the chain methods (`.Returns()`, `.WasCalled()`, etc.) disambiguate between setup and verification: