Coder Social home page Coder Social logo

nbuilder's Introduction

Nbuilder - A rapid test object generator.

Through a fluent, extensible interface, NBuilder allows you to rapidly create test data, automatically assigning values to properties and public fields that are one of the built in .NET data types (e.g. ints and strings). NBuilder allows you to override for properties you are interested in using lambda expressions.

Metric Status
Production Build Build status
Development Build Build status
Nuget NuGet Badge

Join the chat at https://gitter.im/garethdown44/nbuilder

How can NBuilder help?

This test data has a variety of uses. For example:

  • For automated functional and acceptance tests.
  • Returning the data from a stubbed service.
  • Creating test data for use when developing or testing an application.
  • Performance tuning with large amounts of data.

Major features

Persistence

Easily persist generated objects using Persist()

NBuilder also allows you to easily set up persistence. You do this by telling NBuilder how to persist your objects. The most convenient place to do this would be in an NUnit SetUpFixture class.

var repository = new ProductRepository();
BuilderSetup.SetPersistenceCreateMethod<IList<Product>>(repository.CreateAll);

Once you have done this, it's simply a case of calling Persist() instead of Build():

Builder<Product>.CreateListOfSize(100).Persist();

Hierarchy generation

Easily create hierarchies of objects by telling NBuilder how to add children to your object. You can even persist the hierarchies just by giving NBuilder create and update methods.

You can easily create a random hierarchy by first creating an initial list and then calling BuildHierarchy(), and passing in a specification.

var hierarchySpec = Builder<HierarchySpec<Category>>.CreateNew()
                .With(x => x.AddMethod = (parent, child) => parent.AddChild(child))
                .With(x => x.Depth = 5)
                .With(x => x.MaximumChildren = 10)
                .With(x => x.MinimumChildren = 5)
                .With(x => x.NamingMethod = (cat, title) => cat.Title = "Category " + title)
                .With(x => x.NumberOfRoots = 10).Build();

            Builder<Category>.CreateListOfSize(2500).BuildHierarchy(hierarchySpec);

This will create a category tree and by supplying a naming method, will even name your categories with their path in the tree. For example:

 Category - Title = "1"
      Category - Title = "1.1"
      Category - Title = "1.2"
  Category - Title = "2"
      Category - Title = "2.1"
          Category - Title = "2.1.1"
      Category - Title = "2.2"
      Category - Title = "2.3"

Configurability

NBuilder is highly configurable. Through the BuilderSetup class you can control how NBuilder names objects and disable naming for certain properties of certain types.

Custom persistence service

Easily add your own custom persistence service, allowing you to use any ORM.

BuilderSetup.SetPersistenceService(new MyCustomPersistenceService());
Builder<Product>.CreateNew().Persist();
Turning off automatic property naming

If you don't want properties to be automatically given values, you can simply turn it off.

BuilderSetup.AutoNameProperties = false;
Changing the default property namer

You can change the default property namer to use the random value property namer, or you can create your own either from scratch implementing the IPropertyNamer interface, or by extending one of the classes, for example to add support

BuilderSetup.SetDefaultPropertyNamer(new RandomValuePropertyNamer());
Adding a property namer for a specific type

If, for example, you have a class that has a custom struct, NBuilder will ignore this property because it doesn't know how to set it. You could overcome this by adding a special property namer, just for Products.

BuilderSetup.SetPropertyNamerFor<Product>(new CustomProductPropertyNamer(new ReflectionUtil()));
Disabling automatic property naming for a specific property of a specific type

If you don't want values to automatically be assigned to certain properties, you can disable it like this:

BuilderSetup.DisablePropertyNamingFor<Product, int>(x => x.Id);

Extensibility

Through extension methods you can extend NBuilder's fluent interface to add custom building functionality. You can also create custom property namers globally or for specific types.

Custom declarations

In NBuilder nearly all of the public interface is implemented with extension methods. This of course means it's possible to add your own.

For example, out of the box the list builder has seven 'declarations' All(), WhereRandom(n), WhereRandom(n, start, end), WhereTheFirst(n), WhereTheLast(n), AndTheNext(n), AndThePrevious(n). However if you wanted to add your own,

e.g. to return all the even or odd items, all you need to do is write a new extension method - WhereAllEven()

"Operable" extensions

If, for example, you find yourself repeating yourself when creating test data and you want to wrap something up in a method, you can do this by extending IOperable. You can do this generically or per-type.

For example say if rather than saying:

Builder<Product>
	.CreateListOfSize(10)
	.All()
	.Have(x => x.Title = "12345....[LongString].....12345")
	.Build();

You could instead create an extension method:

public static IOperable<Product> HaveLongTitles(this IOperable<Product> operable)
{
    ((IDeclaration<Product>) operable).ObjectBuilder.With(x => x.Title = "12345....[LongString].....12345");
    return operable;
}

Giving you the ability to say:

Builder<Product>
    .CreateListOfSize(10)
    .All()
        .HaveLongTitles()
    .Build();

You could of course make it even more succinct by adding an extension method to IListBuilder

public static IListBuilder<Product> WhereAllHaveLongTitles(this IListBuilder<Product> listBuilder)
{
    var listBuilderImpl = (IListBuilderImpl<Product>) listBuilder;
    var declaration = new GlobalDeclaration<Product>(listBuilderImpl, listBuilderImpl.CreateObjectBuilder());
    declaration.Have(x => x.Title = "12345....[LongString].....12345");

    return declaration;
}

This would allow you to say:

Builder<Product>.CreateListOfSize(10).WhereAllHaveLongTitles();

For more examples, please check the functional tests

Until the full documentation is available please have a look at the functional tests in the source code. These explain how to do everything that's currently possible in NBuilder.

Continuous Integration

NBuilder uses AppVeyor for continuous integration.

nbuilder's People

Contributors

ademcatamak avatar apollo2030 avatar azhmur avatar crmckenzie avatar dhemken97 avatar doug-murphy avatar garethdown44 avatar gitter-badger avatar gprasant avatar jasoncavaliere avatar montasaurus avatar oviradoi avatar pjmagee avatar purekrome avatar seanfox avatar stanleygoldman avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

nbuilder's Issues

Generating short phrase occassionally results in empty string

When calling RandomGenerator.Phrase with a max length of 10 it will sometimes return an empty phrase when any of the latin words longer than the short max length resulting in an empty string. Expected is always return a non-empty phrase less than or equal to the max length.

property value assigning should ignore indexers

What steps will reproduce the problem?

  1. Create an object with an indexer:

    public string this[string propertyName]
    {
        get
        {
            return result.GetErrorMessage(propertyName);
        }
    }
    
  2. Set up a static Create() method in a Mother object with some
    DisablePropertyNamingFor statements:

    public static PositionMother CreatePositionMother()
    {
        BuilderSetup.DisablePropertyNamingFor<Position, string>(p => 
    

    p.Error);
    BuilderSetup.DisablePropertyNamingFor<Position, bool>(p =>
    p.HasErrors);

        return new PositionMother() { Positions = 
    

    Builder.CreateListOfSize(5).Build() };
    }

  3. Run up the mother object.

What is the expected output? What do you see instead?

It all works but the Warning message is there for the indexer and we'd
like to avoid it:

NBuilder warning: Item threw an exception when attempting to read its
current value

What version of the product are you using? On what operating system?

Debug version: 1.1.2925.23829
Windows 7 x64

Please provide any additional information below.

Minor inconvienience but how do we write a DisablePropertyNamingFor
statement to ignore the indexer?

Can't cast IListBuilder<T> to IListBuilderImpl<T>

Following your examples, I've created the following extension method

    public static class DiscretionaryRecognitionUser_MapFactoryExtensions
    {
        public static IListBuilder<DiscretionaryRecognitionUser_Map> GivenProgram(
            this IListBuilder<DiscretionaryRecognitionUser_Map> builder, 
            Program program)
        {
            var listBuilderImpl = (IListBuilderImpl<DiscretionaryRecognitionUser_Map>)builder;
            var declaration = new GlobalDeclaration<DiscretionaryRecognitionUser_Map>(listBuilderImpl, listBuilderImpl.CreateObjectBuilder());
            declaration.And(m => m.User = NFactoryGirl.Builder<User>().With(u => u.Program = program).Build());

            return declaration;
        }
    }

The first line of this method raises an exception

Unable to cast object of type 'FizzWare.NBuilder.Implementation.GlobalDeclaration1[Phoenix.Model.ClientBase.DiscretionaryRecognitionUser_Map]' to type 'FizzWare.NBuilder.Implementation.IListBuilderImpl1[Phoenix.Model.ClientBase.DiscretionaryRecognitionUser_Map]'.

I got your package via nuget, version 3.0.1.1. It does not appear to match the repository though, and I noticed an issue saying that the nuget package is out of date. Will an upgrade fix this problem?

ShouldBeAbleToUseMultipleTheFirsts() unit test fails

I discovered this while testing my changes re #55, and then checked out a bunch of other commits in history, and found that it was already failing, even in the master branch. I stepped through the code for like an hour and couldn't figure out the cause.

screenclip

Quirky behaviour when generating Lists with multiple calls to TheLast(1)

Hi,
first of all I love using NBuilder! Thanks for your work!
But...

[EDIT: Please see post 2 for a more precise explanation of the problem.]

I recently found a behaviour that I can't explain. I have a class RepricingItem that has auto properties SellerId and SalePrice amongst others.
When I build lists like the following...

        var listA = Builder<RepricingItem>.CreateListOfSize(3)
            .All()
                .With(x => x.SellerId = 123)
            .TheLast(1)
                .With(x => x.SalePrice = 70m)
            .TheLast(1)
                .With(x => x.SalePrice = 60m)
            .Build();

        var listB = Builder<RepricingItem>.CreateListOfSize(3)
            .TheLast(1)
                .With(x => x.SalePrice = 70m)
            .TheLast(1)
                .With(x => x.SalePrice = 60m)
            .Build();

... I perceive a strange behaviour.
listA[2] and listB[2] do NOT have the same SalePrice Property.
listA[2].SalePrice is 70m, whereas listB[2].SalePrice is 60m.

The difference in both list-builds is just the All()-call to a completely unrelated property in listA.

Is there any explanation for this behaviour or did I just stumble upon a bug here?
Thanks for any responses! Hopefully somebody can still here me... :)

(The double-TheLast(1) of listA is done because I want to return a IListBuilder from a function that sets "default" values for multiple test cases. The second TheLast(1) is the specific test case.)

Add some more Issue labels.

Maybe add a few more labels:

  • up for grabs
  • documentation
  • needs more info (eg the person who created the issue needs to provide more info about the problem). eg. issue #23

this issue also extends issue #41 😊

new Builder<T> should include a default ctor.

So I was peeking at some new code pushed up to dev branch (sneaky me!) and noticed this.

        public Builder(BuilderSetup builderSetup)
        {
            _builderSetup = builderSetup;
        }

Sweet. Just like your breaking changes doc says -> Builder is no longer static.

But .. everytime i create a builder i have to manually also create a new builderSetup????

what about this..

public Builder() : this(new BuilderSetup())
{
}

public Builder(BuilderSetup builderSetup)
{
    if (builderSetup == null)
    {
        throw new ArgumentNullException(nameof(builderSetup));
    }

    _builderSetup = builderSetup;
}

NuGet package out of date

Hi. NBuilder NuGet package is last published on 2011-11-14, but there has been recent activity (June 2014) even in the Nuspec file, NBuilder package creation, Teamcity Generation of NuGet package. Why is the NuGet update broken?
Thanks for the great tool.

License?

Couldn't find a license file in the source.

Is it MIT? MIT would be great! We usually have organizational trouble with LGPL but MIT works very well.

Thanks

Random double min-max bug

The code to generate a random double between min and max is incorrect:

public virtual double Next(double min, double max)
{
         return rnd.NextDouble();
}

Should be:

public virtual double Next(double min, double max)
{
         return min + rnd.NextDouble() * (max - min);
}

Convert Rhino.Mocks to NSubstitute

Rhino.Mocks appears to be unsupported and has not been ported to .NET Core. NSubstitute has. Convert the unit tests to use NSubstitute instead.

WithConstructor seems to resolve constructor parameters and only once

Consider this usage:

.CreateListOfSize(5)
.All()
.WithConstructor(() => new Registration(Faker.Internet.Email(), RegistrationType.Beneficiary))

Passes the same email to the constructor for every time it creates the object. It should not do that.

Your code

var constructorArguments =
                (from argument in ((NewExpression)constructor.Body).Arguments
                select Expression.Lambda(argument).Compile().DynamicInvoke()).ToArray();

Resolves once and uses the same args over and over. Seems quite inappropriate for what this library does and the efforts you've made elsewhere to introduce randomness. You discard the constructor expression but why not use it to instantiate the object?

Consider this class

public class User 
{
  public Foo(string emailAddress)
  {
    EmailAddress = emailAddress;
  }

  public string EmailAddress { get; protected set; }
}

So anywhere we have a class with a constructor that initialises a member that is protected it becomes unusable with the CreateListOfSize method. I'd need to loop myself and provide a different expression each time.

parallelism and NBuilder

Hi guys,

Not sure if anyone is actively contributing to this any more, looks like very minimal lately.

We had an issue when converting our Nunit tests to XUnit for parallel capabilities, and had make some mods to the source in order to get everything working, making the Builder and the BuilderSetup instance based rather than static.

Would you be interested in a pull request, or should we fork? We'd love for this to be rolled in and not have to maintain our own copy, but there was no way to work around the issue. If you're interested in looking at the changes we made let's chat!

-Jason

Replace ActiveRecord in Tests w/ EntityFramework

Castle.ActiveRecord is no longer maintained (since 2012). It is out of sync with Iesi.Collections which makes it impossible to upgrade any packages. This is test & demo code only, so I'm going to update the persistence tests to use EntityFramework instead. I will also use an in-memory database so that no external setup is required to run the tests. This should make it easier for potential contributors.

Add overload to BuilderSetup.DisablePropertyNamingFor - useful for indexed properties

Hi, I have a class with two indexer and I need to disable the autoNameProperty for these two guys.

public class myClass
{
    public string this[string val]
    {
        get { return "something"; }
    }

    public string this[int val]
    {
        get { return "something"; }
    }
}

Maybe is just because I actually don't know how to refer the indexed properties in the lambda expression needed by the current implementatio of DisablePropertyNamingFor, but in any case (even if it's possible to do), I think that it can be useful to have an overload like this:

    public static void DisablePropertyNamingFor(PropertyInfo property)
    {
        HasDisabledAutoNameProperties = true;
        disabledAutoNameProperties.Add(property);
    }

In this way it's possible use the following code:

    public void SetupNBuiler()
    {
        var t = typeof(TestoMultilingua);
        var indexerInt = t.GetProperty("Item", new[] { typeof(int) }); // The default name of an indexer is "Item".
        var indexerString = t.GetProperty("Item", new[] { typeof(string) });
        BuilderSetup.DisablePropertyNamingFor(indexerInt);
        BuilderSetup.DisablePropertyNamingFor(indexerString);            
    }

Thanks

CreateListOfSize with SequentialGenerator. Generated data in wrong order.

String lengths are both 50. Strings differ at index 4.

Expected: "item01item23item4item5item6item7item8item9itemitem"

But was: "item67item89item0item1item2item3item4item5itemitem"

    [Test]
    public void Test()
    {
        var generator = new SequentialGenerator<int>();
        var build = Builder<TestClass>.CreateListOfSize(10).All().With(x => x.Property = "item")
            .TheFirst(2).With(x => x.Property += String.Format("{0}{1}", generator.Generate(), generator.Generate()))
            .TheNext(6).With(x => x.Property += generator.Generate())
            .Build();

        Assert.AreEqual("item01item23item4item5item6item7item8item9itemitem", String.Join(String.Empty, build.Select(x => x.Property)));
    }

    public class TestClass
    {
        public string Property { get; set; } 
    }

404 for https://github.com/Documentation/Configuration

I'm looking for samples of PersistenceService , SetCreatePersistenceMethod and SetUpdatePersistenceMethodbut I'm not findind anything. Is there a way of persisting data in NBuilder without using an ORM for Mocking purposes? Any sample somewhere?

Support overwriting properties with non-default values.

Provide an optional override to the test called ShouldOnlyNamePropertiesThatAreNullOrDefault.

Here is some sample code for how this might be implemented.

        public class WidgetWithPropertyInitialization
        {
            public WidgetWithPropertyInitialization()
            {
                Name = "";
                Id = "";
            }

            public string Name { get; set; }
            public string Id { get; set; }
        }


        [Fact]
        public void ShouldSetPropertiesWhenPropertiesAreInitailizedByConstructor() {
            var result = new Builder()
                .WithSettings(row =>
                    {
                        row.PropertyAssignmentStrategy = PropertyAssignmentStrategy.All; // All, Safe (default)
                    } )
                .CreateNew<WidgetWithPropertyInitialization>()
                .Build()
                ;

            result.Id.ShouldBe("Id1");
            result.Name.ShouldBe("Name1");
        }

Using factory methods rather than constructor

We are using some factory methods to create our domain objects rather than using the constructor. It would be great to be able to use the WithConstructor extension (or something similar) to create the objects. Below is an example:

CreateListOfSize(20)
.All()
.WithConstructor(() => Visit.Create(Guid.NewGuid(), new DateTime(2017, 05, 09, 09, 30, 00), new DateTime(2017, 05, 09, 09, 45, 00)))

As the WithConstructor extension expects the a new expression, the above code throws an exception at runtime.

Any suggestions?

Has NBuilder stopped being maintained?

@garethdown44 Heya - are you there? Has this project stopped being maintained?

if yes - could you open it up to someone else (no, i'm not suggesting me) to be a co-admin so they can take ownership of the outstanding issues, etc.

if no - will you be able to start to adress various issues in the current issue list. (My biggest concern is the #36 ).

http://www.nbuilder.org

http://www.nbuilder.org no longer exists, i would just remove it from the Project and have it point to the Github repo :)

RandomGenerator.Next(decimal, decimal) is broken for certain cultures

Currently, RandomGenerator.Next(decimal, decimal) does the following:

return (decimal)Convert.ToDecimal(string.Format("{0}.{1}", integer, fraction));

This fails for cultures where value of NumberFormatInfo.NumberDecimalSeparator is anything other than ..

One option would be replacing the . with the value of NumberFormatInfo.NumberDecimalSeparator, but that would still incur an awkward "integer to string to decimal" roundtrip.

Here's what I think is a better way:

public virtual decimal Next(decimal min, decimal max)
{
    if (min < int.MinValue)
        min = (decimal)int.MinValue;

    if (max > int.MaxValue)
        max = (decimal)int.MaxValue;

    var scale = (decimal)Next(0d, 1d);
    var increment = scale * (max - min);

    return min + increment;
}

Building a Guid changes Guid.Empty to be 1

I previously reported this in the old Google Code bug tracker, but afterwards nbuilder was moved to Github. Re-posting here.

How to reproduce:
1.Use NBuilder to create a new Guid, eg: Builder<Guid>.CreateNew().Build();
2.Compare Guid.Empty to new Guid() or default(Guid).

What is the expected output?
Guid.Empty should equal new Guid() or default(Guid)

What do you see instead?
Guid.Empty has been changed to {00000000-0000-0000-0000-000000000001}, while new Guid() and default(Guid) are {00000000-0000-0000-0000-000000000000}.

Using version NBuilder version 3.0.1.0 in .NET 4.5 on Windows 8.1

Here's an example NUnit test. You should set a breakpoint to see the different values:

[Test]
public void test_guid()
{
    var guid1 = Guid.Empty;
    var guid2 = new Guid();
    var guid3 = Builder<Guid>.CreateNew().Build();
    var guid4 = Guid.Empty;

    guid1.Should().Be(guid4);
}

image

Building a new DateTime changes the value of DateTime.MinValue

The following code produces interesting results:

var generatedDateTime = Builder<DateTime>.CreateNew().Build();
var minDateTime = DateTime.MinValue;
var maxDateTime = DateTime.MaxValue;

After running the above example, generatedDateTime will be 1/1/0001 12:00:00 AM, minDateTime will be (assuming it was run on Dec 2, 2013) 12/2/2013 12:00:00 AM, and maxDateTime will be 12/31/9999 11:59:59 PM. I'm fairly certain this is not intended.

NextString output not withing min and max

This test will fail at some point the values generated are not withing the min and max, just added a loop to the already existing text

`
[Test(Description = "Tests the NextString returns a string that is between the minimum and maximum values specified")]
public void
ShouldBeBetweenMinAndMaxNextString()
{

        // Arrange
        int minValue = 100;
        int maxValue = 200;
        

        for(int i=0; i<100;i++)
        {
            // Act
            var result = randomGenerator.NextString(minValue, maxValue);

            // Assert
            Assert.That(result.Length, Is.LessThanOrEqualTo(maxValue));
            Assert.That(result.Length, Is.GreaterThanOrEqualTo(minValue));
        }
        
    }

`

Move CI over to AppVeyor

First mentioned in this conversation: https://github.com/garethdown44/nbuilder/pull/35

I'm happy to take the reigns on this. I've done a number of OSS projects using AV to publish to myget (for dev) then nuget (for live).

If the collabs are happy with this, I can talk about my suggetsions (high level / how I automate the version numbers / why 2 feeds, etc).

else close this issue 👍

Passing GetRandom through builder functions?

I've always found the GetRandom to be hidden away and not really felt like part of the API that makes NBuilder so special. What about an override of our builder functions where we can pass in an instance of a generator, e.g

Builder<Person>().CreateListOfSize(10)
.With(x => x.Name, (g) => g.FirstName())
.With(x => x.LastName, (g) => g.LastName())
.With(x => x.Age, (g) => g.Birthday())
.With(x => x.PostCode, (g) => g.PostCode())

Add Documentation for GetRandom :: why and how.

GetRandom is hella useful for creating fake data on the fly when using Builder<T>.

eg.

public static IList<User> CreateUsers(int numberOfUsers = 20)
{
    return Builder<User>.CreateListOfSize(numberOfUsers)
                        .TheFirst(1)
                        .With(x => x.Id, "users/1")
                        .And(x => x.Name, "Han Solo")
                        .All()
                        .With(x => x.Name, $"{GetRandom.FirstName()} {GetRandom.LastName()}")
                        .With(x => x.Email, GetRandom.Email())
                        .Build();
}

Needs documentation added to dat wikiz.

NBuilder doesn't work with VB.NET

NBuilder does not work as expected in VB.NET

Test code:

Imports FizzWare.NBuilder

Module Module1
Sub Main()
Dim x = Builder(Of Something).CreateListOfSize(5).All().With(Function(s) s.Int = 1).Build()
Console.WriteLine(x.All(Function(s) s.Int = 1)) 'returns false
End Sub
End Module

Public Class Something
Public Property Int() As Integer
Public Property Bool As Boolean
Public Property Str() As String
End Class

Unexpected ordering of actions when using All and Random together

I expect to build some strings that are sequences of a, then possibly with b, and then with c. What I actually get are sequences of a, then c, then possibly b. Below is a sample program to reproduce. Maybe this is beyond the scope of intended use and maybe I could figure out how to rewrite it in one line to work around this, but I was really surprised by it.

namespace TestNBuilder
{
    class MyString
    {
        public MyString()
        {
            Name = "";
        }

        public string Name { get; set; }
    }

    class MainClass
    {
        public static void Main (string[] args)
        {
            var generator = new RandomGenerator ();
            IEnumerable<MyString> list =
                Builder<MyString>.CreateListOfSize (10)
                    .All().With( x => x.Name = new string('a', generator.Next(1, 10)))
                    .Random(5).With(x => x.Name += new string('b', generator.Next(3, 6)))
                    .All().With( x => x.Name += new string('c', generator.Next(1, 10)))
                    .Build ();
            foreach (MyString str in list) {
                Console.WriteLine (str.Name);
            }
        }
    }
}

Consider ValidationAttributes

Would it be possible to check properties for ValidationAttributes?

I often get errors with database integration tests because of strings that are too long. These properties have a MaxLength attribute, and it would be great if nBuilder could take them into account.

Upgrade to SL5

I'm trying to get everything "current" as of the last 2 years. The SL tests are not yet passing. I may bring in @cmbrown1598 to help as he has recent problem-solving skills in this space.

Setup labels for issues

@crmckenzie We have 23 issues and being able to filter issues on labels will help us begin to prioritise and organise Nbuilder.

I propose the following Labels:

Bug: Bug in NBuilder logic
Core: NBuilder core logic improvement / refactoring
Feature: A new feature requested from an issue
Needs more info: Someone has submitted an issue but we need more information to investigate
api needs work: The core of NBuilder may support a proposed feature, but the NBuilder API needs some work in order to facilitate it.
Dev ops: CI / NuGet / Builds

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.