An open API service indexing awesome lists of open source software.

https://github.com/technobre/powerutils.xunit.extensions

Utils, helpers and extensions to create tests with xUnit
https://github.com/technobre/powerutils.xunit.extensions

c-sharp csharp dotnet dotnet-core test xunit

Last synced: 12 months ago
JSON representation

Utils, helpers and extensions to create tests with xUnit

Awesome Lists containing this project

README

          

# PowerUtils.xUnit.Extensions

![Logo](https://raw.githubusercontent.com/TechNobre/PowerUtils.xUnit.Extensions/main/assets/logo/logo_128x128.png)

***Utils, helpers and extensions to create tests with xUnit***

![Tests](https://github.com/TechNobre/PowerUtils.xUnit.Extensions/actions/workflows/tests.yml/badge.svg)
[![Mutation tests](https://img.shields.io/endpoint?style=flat&url=https%3A%2F%2Fbadge-api.stryker-mutator.io%2Fgithub.com%2FTechNobre%2FPowerUtils.xUnit.Extensions%2Fmain)](https://dashboard.stryker-mutator.io/reports/github.com/TechNobre/PowerUtils.xUnit.Extensions/main)

[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=TechNobre_PowerUtils.xUnit.Extensions&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=TechNobre_PowerUtils.xUnit.Extensions)
[![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=TechNobre_PowerUtils.xUnit.Extensions&metric=reliability_rating)](https://sonarcloud.io/summary/new_code?id=TechNobre_PowerUtils.xUnit.Extensions)
[![Bugs](https://sonarcloud.io/api/project_badges/measure?project=TechNobre_PowerUtils.xUnit.Extensions&metric=bugs)](https://sonarcloud.io/summary/new_code?id=TechNobre_PowerUtils.xUnit.Extensions)

[![NuGet](https://img.shields.io/nuget/v/PowerUtils.xUnit.Extensions.svg)](https://www.nuget.org/packages/PowerUtils.xUnit.Extensions)
[![Nuget](https://img.shields.io/nuget/dt/PowerUtils.xUnit.Extensions.svg)](https://www.nuget.org/packages/PowerUtils.xUnit.Extensions)
[![License: MIT](https://img.shields.io/github/license/TechNobre/PowerUtils.xUnit.Extensions.svg)](https://github.com/TechNobre/PowerUtils.xUnit.Extensions/blob/main/LICENSE)

- [Support to](#support-to)
- [Dependencies](#dependencies)
- [How to use](#how-to-use)
- [Install NuGet package](#install-nuget-package)
- [Extensions](#extensions)
- [object.InvokeNonPublicMethod();](#objectinvokenonpublicmethod)
- [object.SetNonPublicProperty(); and object.SetNonPublicField()](#objectsetnonpublicproperty-and-objectsetnonpublicfield)
- [Helpers](#helpers)
- [Sort tests by priority](#sort-tests-by-priority)
- [InvokeStaticNonPublicMethod](#invokestaticnonpublicmethod)
- [Factories](#factories)
- [ObjectFactory](#objectfactory)
- [Contribution](#contribution)

## Support to
- .NET 9.0
- .NET 8.0
- .NET 7.0
- .NET 6.0
- .NET 5.0
- .NET 3.1
- .NET Standard 2.1
- .NET Framework 4.6.2 or more

## Dependencies

- xunit.extensibility.core [NuGet](https://www.nuget.org/packages/xunit.extensibility.core/)

## How to use

### Install NuGet package
This package is available through Nuget Packages: https://www.nuget.org/packages/PowerUtils.xUnit.Extensions

**Nuget**
```bash
Install-Package PowerUtils.xUnit.Extensions
```

**.NET CLI**
```
dotnet add package PowerUtils.xUnit.Extensions
```

### Extensions

#### object.InvokeNonPublicMethod();
Extension to invoke non-public methods

```csharp
public class SampleClass
{
private bool _methodName1(int value)
{
return false;
}

private bool _methodName2()
{
return true;
}

private void _methodName3(int value)
{
}

private void _methodName4()
{
}

private Task _methodName5Async()
{
}

private Task _methodName6Async()
{
}
}
```

```csharp
var sampleClass = new SampleClass();

var result1 = sampleClass.InvokeNonPublicMethod("_methodName1", 1);
var result2 = sampleClass.InvokeNonPublicMethod("_methodName2");

sampleClass.InvokeNonPublicMethod("_methodName3", 532);
sampleClass.InvokeNonPublicMethod("_methodName4");

var result3 = await sampleClass.InvokeNonPublicMethodAsync("_methodName5Async", 1);
await sampleClass.InvokeNonPublicMethodAsync("_methodName6Async");
```

#### object.SetNonPublicProperty(); and object.SetNonPublicField()
Extensions to set non-public properties and fields

```csharp
public class SampleClass
{
public string PropSetPrivate { get; private set; }
private string _propPrivate { get; set; }
private string _privateField;
}
```

```csharp
var sampleClass = new SampleClass();

sampleClass.SetNonPublicProperty(p => p.PropSetPrivate, "Value");
sampleClass.SetNonPublicProperty("_propPrivate", "Value");
sampleClass.SetNonPublicField("_privateField", "Value");
```

### Helpers

#### Sort tests by priority

```csharp
[TestCaseOrderer(PriorityOrderer.Name, PriorityOrderer.Assembly)]
public class Tests
{
[Fact, TestPriority(2)]
public void Test1()
{
}

[Fact, TestPriority(1)]
public void Test2()
{
}
}
```

#### InvokeStaticNonPublicMethod

```csharp
public static class SampleClass
{
private static bool _methodName1(int value)
{
return false;
}

private static bool _methodName2()
{
return true;
}

private static void _methodName3(int value)
{
}

private static void _methodName4()
{
}

private static Task _methodName5Async()
{
}

private static Task _methodName6Async()
{
}
}
```

```csharp
var result1 = ObjectInvoker.Invoke(typeof(SampleClass), "_methodName1", 1);
var result2 = ObjectInvoker.Invoke(typeof(SampleClass), "_methodName2");

ObjectInvoker.Invoke(typeof(SampleClass), "_methodName3", 532);
ObjectInvoker.Invoke(typeof(SampleClass), "_methodName4");

var result3 = await ObjectInvoker.InvokeAsync(typeof(SampleClass), "_methodName5Async", 1);
await ObjectInvoker.InvokeAsync(typeof(SampleClass), "_methodName6Async");
```

### Factories

#### ObjectFactory
Factory to create an object by non public constructor

```csharp
public class TestObject
{
public string Name { get; private set; }
public int Age { get; private set; }

private TestObject()
{
this.Name = "Example name";
this.Age = 21;
}

protected TestObject(string name, int age)
{
this.Name = name;
this.Age = age;
}
}

var obj1 = ObjectFactory.Create();
var obj2 = ObjectFactory.Create("My name", 50);
```

## Contribution

If you have any questions, comments, or suggestions, please open an [issue](https://github.com/TechNobre/PowerUtils.xUnit.Extensions/issues/new/choose) or create a [pull request](https://github.com/TechNobre/PowerUtils.xUnit.Extensions/compare)