Here's one way:
public class CustomCsvDataAttribute : CsvDataAttribute
{
protected override OpenTextReader(ICodeElementInfo codeElement)
{
string filePath = Config.GetMyConfigFilePath(); // or whatever
return File.OpenText(filePath);
}
}
Then:
[Test, CustomCsvData]
public void MyTest() { ... }
-----Original Message-----
From: [email protected] [mailto:[email protected]] On
Behalf Of max2256
Sent: Tuesday, February 17, 2009 9:53 AM
To: MbUnit.User
Subject: MbUnit Re: CsvData problem
So I can be able to change the CSV file of my tests without recompiling the
code.
e.g. I would have a folder containing multiple CVS files with data
DATA
|__ data1.csv
|__ data2.csv
|__ data3.csv
In my config file I would specifie the csv file to use and I would not need
to recompile!
Max
On Feb 16, 2:47 pm, "Jeff Brown" <[email protected]> wrote:
> I'm sorry, this is not supported by the C# language or .Net runtime.
> Attribute properties can only be set to compile-time constants.
>
> Why do you need to pull the path from a configuration file?
>
> Jeff.
>
>
>
> -----Original Message-----
> From: [email protected] [mailto:[email protected]]
> On
>
> Behalf Of max2256
> Sent: Monday, February 16, 2009 7:21 AM
> To: MbUnit.User
> Subject: MbUnit Re: CsvData problem
>
> Hi,
>
> I would like to know if there is a workaround on setting the CSV
> path attribute from an config file?
> Let me explain with an example :
>
> public class Person
> {
> [CsvData(FilePath = Config.getCsvPerson() , HasHeader = true)]
> public Person(string name) { }
> }
>
> If I currently run this I get the following compilation error :
> An attribute argument must be a constant expression, typeof
> expression or array creation expression
>
> Thank you
>
> On Feb 7, 5:09 am, "Jeff Brown" <[email protected]> wrote:
> > On the fixture class.
>
> > But it should also work on the constructor as well as on the
> > constructor parameter. It can also be used on fields and properties
> > as well as individual test methods!
>
> > Jeff.
>
> > -----Original Message-----
> > From: [email protected]
> > [mailto:[email protected]]
> > On
>
> > Behalf Of max2256
> > Sent: Monday, February 02, 2009 5:26 AM
> > To: MbUnit.User
> > Subject: MbUnit Re: CsvData problem
>
> > What do you mean by putting it on the type?
>
> > On Jan 31, 4:03 pm, Jeff Brown <[email protected]> wrote:
> > > That's a bug. We should be able to apply the attribute to the
> > > constructor. However, try putting it on the type instead.
>
> > > On Jan 29, 2009, at 2:35 PM, max2256 <[email protected]> wrote:
>
> > > > Hi
>
> > > > I have the following values in my csv file
>
> > > > firstName,LastName,age
> > > > Jim,Morrison,40
> > > > Pat,King,25
>
> > > > Now let's say I want to use the CsvData attribute this way:
>
> > > > public class PersonTest
> > > > {
> > > > private Person p;
>
> > > > [CsvData(FilePath = "Persons.csv", HasHeader = true)]
> > > > public PersonTest( string fName, string lName, int age )
> > > > {
> > > > p = new Person(fName,lName,age);
> > > > }
> > > > }
>
> > > > I've noticed that it is not possible to use le CsvData attribute
> > > > at the constructor level, the only way of achieving this is with
> > > > the following :
>
> > > > public PersonTest( [CsvData(FilePath = "Persons.csv",
> > > > HasHeader = true)] string fName, string lName, int age )
>
> > > > My question is how can I get the lName and age value if I only
> > > > put the CsvData attribute only on the first parameter ?
>
> > > > Thanx- Hide quoted text -
>
> > - Show quoted text -- Hide quoted text -
>
> - Show quoted text -
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"MbUnit.User" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/MbUnitUser?hl=en
-~----------~----~----~----~------~----~------~--~---