加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 为未暴露于UI的方法编写测试 – 需要一般帮助

发布时间:2020-12-15 21:33:49 所属栏目:百科 来源:网络整理
导读:我是TDD的新手,并且正在使用NUnit以C#编写的Card Game应用程序的测试. 它的证明大多非常有用,但有一些我想测试的东西,但不希望公开任何公共属性. 例如,我希望能够测试一个新的卡片组由4个套装组成,每套套装有13张卡片.它可能看起来像: [Test()]public void
我是TDD的新手,并且正在使用NUnit以C#编写的Card Game应用程序的测试.

它的证明大多非常有用,但有一些我想测试的东西,但不希望公开任何公共属性.

例如,我希望能够测试一个新的卡片组由4个套装组成,每套套装有13张卡片.它可能看起来像:

[Test()]
public void ADeckOfCardsHas4Suits()
{
   Game game = new Game();
   Assert.AreEqual(4,game.Deck.SuitCount);
   Assert.AreEqual(13,game.Deck.GetCards(Suit.Spades).Count)
}

随着SuitCount返回类似的东西:

return this.cards.Select(c => c.Suit).Distinct().Count();

和GetCards(西装套装):

return this.cards.where(c => c.Suit == suit);

但是我不想将API中的这些属性或方法暴露给UI(我甚至可能不希望暴露Deck),但我不确定如何在不公开的情况下对它们进行测试.

有没有普遍接受的方法吗?

干杯

斯图尔特

解决方法

在这种情况下,我们经常使用(滥用?)朋友程序集来允许测试项目查看被测试类的内部成员.

编辑:

在您的主项目中添加一个FriendAssemblies.cs文件:

using System.Runtime.CompilerServices;

// making internals available to the testing project
[assembly: InternalsVisibleTo( "MyProject.IntegrationTests" )]
[assembly: InternalsVisibleTo( "MyProject.UnitTests" )]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读