|
using System;
using System.Collections.Generic;
using System.Text;
using NUnit.Framework;
using Utility;
namespace Testing
{
[TestFixture]
public class TestTestClassKey
{
/// <summary>
/// Define test class to use key for
/// </summary>
public class TestClass
{
public string Column1 = null;
public string Column2 = null;
public TestClass(string Column1, string Column2)
{
this.Column1 = Column1;
this.Column2 = Column2;
}
}
//define key to use for test class
public class TestClassKey : ClassKey<TestClass>
{
//Init with object
public TestClassKey(TestClass ClassReference) : base(ClassReference) { }
//return list of column values we need to use as a key
public override object[] GetKeyValues()
{
return new object[] {
ClassReference.Column1,
ClassReference.Column2
};
}
}
public void TestClassKeyCompare(string Column1Orig, string Column2Orig, string Column1New, string Column2New)
{
TestClass model1 = new TestClass(Column1Orig, Column2Orig);
TestClass model2 = new TestClass(Column1Orig, Column2Orig);
Assert.AreEqual(new TestClassKey(model1), new TestClassKey(model2));
Assert.IsTrue(new TestClassKey(model1) == new TestClassKey(model2));
//change side of one and make sure not equal
model1.Column1 = Column1New;
model2.Column2 = Column2New;
Assert.AreNotEqual(new TestClassKey(model1), new TestClassKey(model2));
Assert.IsTrue(new TestClassKey(model1) != new TestClassKey(model2));
}
[Test]
public void TestClassKeyDifferent()
{
TestClassKeyCompare(
"one",
"two",
"two",
"on"
);
}
[Test]
public void TestClassKeyXOROrderProblem()
{
TestClassKeyCompare(
"one",
"two",
"two",
"one"
);
}
[Test]
public void TestClassKeyNullProblem()
{
TestClassKeyCompare(
null,
"two",
"two",
"one"
);
}
//define class that uses directly instead of through third class
public class TestClass2 : ClassKey<TestClass2>
{
public string Column1 = null;
public string Column2 = null;
public TestClass2(string Column1, string Column2)
: this()
{
this.Column1 = Column1;
this.Column2 = Column2;
}
//Init with object
public TestClass2()
: base()
{
this.ClassReference = this;
}
//return list of column values we need to use as a key
public override object[] GetKeyValues()
{
return new object[] {
ClassReference.Column1,
ClassReference.Column2
};
}
}
[Test]
public void TestEqual()
{
TestClass2 a = new TestClass2("one", "two" );
TestClass2 b = new TestClass2("one", "two");
TestClass2 c = new TestClass2("two", "one");
TestClass2 d = null;
TestClass2 e = null;
Assert.IsTrue(a == b);
Assert.IsFalse(a == c);
Assert.IsFalse(a == d);
Assert.IsTrue(d == e);
}
[Test]
public void TestNotEqual()
{
TestClass2 a = new TestClass2("one", "two");
TestClass2 b = new TestClass2("one", "two");
TestClass2 c = new TestClass2("two", "one");
TestClass2 d = null;
TestClass2 e = null;
Assert.IsFalse(a != b);
Assert.IsTrue(a != c);
Assert.IsTrue(a != d);
Assert.IsFalse(d != e);
}
[Test]
public void TestGetHashCode()
{
TestClass2 a = new TestClass2("one", "two");
TestClass2 b = new TestClass2("one", "two");
TestClass2 c = new TestClass2("two", "one");
Dictionary<TestClass2, string> testItems = new Dictionary<TestClass2, string>();
testItems.Add(a, "a");
//can't add b since same as a
testItems.Add(c, "c");
Assert.AreEqual("a", testItems[a]);
Assert.AreEqual("c", testItems[c]);
}
}
}
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
I've been a software developer since 1996 and have enjoyed C# since 2003. I have a Bachelor's degree in Computer Science and for some reason, a Master's degree in Business Administration. I currently do software development contracting/consulting.