I am trying to test a method – and getting an error:
Cannot create an instance of the variable type ‘Item’ because it does not have the new() constraint
Required information for below:
public interface IHasRect
{
Rectangle Rectangle { get; }
}
Helper class:
class Item : IHasRect
{
public Item(Point p, int size)
{
m_size = size;
m_rectangle = new Rectangle(p.X, p.Y, m_size, m_size);
}
}
For the function to be tested, I need to instantiate an object…
public class SomeClass<T> where T : IHasRect
The test:
public void CountTestHelper<Item>() where Item : IHasRect
{
Rectangle rectangle = new Rectangle(0, 0, 100, 100);
SomeClass<Item> target = new SomeClass<Item>(rectangle);
Point p = new Point(10,10);
Item i = new Item(p, 10); // error here
...
}
[TestMethod()]
public void CountTest()
{
CountTestHelper<Item>();
}
I am trying to understand what this error means, or how to fix it, by reading http://msdn.microsoft.com/en-us/library/d5x73970.aspx and http://msdn.microsoft.com/en-us/library/x3y47hd4.aspx – but it doesn’t help.
I don’t understand this error – I have already constrained the “SomeClass” to be of type. I cannot constrain the entire Test class (the unit test class generated by Visual Studio, which contains all the tests) – I will get a number of other errors otherwise. The Item class doesn’t have any template…
The
Itemin the line:refers to the generic type parameter
Itemof theCountTestHelpermethod, not the classItem. Change the generic parameter name e.g.alternatively you can fully qualify the name of the
Itemclass you want to create: