๋ด ๋๋ฉ์ธ ๋ ์ด์ด์๋ ๋ค์๊ณผ ๊ฐ์ ํด๋์ค๊ฐ ์์ต๋๋ค.
public class Telefone : IEntity
{
public virtual int Id { get; protected internal set; }
public virtual string Tipo { get; set; }
public virtual string Numero { get; set; }
}
์์ด๋๋ ๋ด๋ถ์ ์ผ๋ก ๋ณดํธ๋์ด ์์ต๋๋ค. ์ด๊ฒ์ Id๋ฅผ ์์ฑํ๋ ์ฌ๋์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ด๊ณ ReadOnly์ฌ์ผ ํ๋ ์๋์ ์ธ ๊ฒ์
๋๋ค.
๊ทธ๋ฌ๋ ํ
์คํธ ๊ณ์ธต์์๋ ์ด ์์ฑ์ setter์ ์ก์ธ์คํ ์ ์์ด์ผ ํฉ๋๋ค.
๊ทธ๋์ ๋ด ๋๋ฉ์ธ ๋ ์ด์ด์์ AssemblyInfo.cs์ ์์ฑ์ ์ถ๊ฐํ์ต๋๋ค.
[assembly: InternalsVisibleTo("MyTestLayer")]
์ด๋ ๊ฒ ํ๋ฉด ํ ์คํธ ๋ ์ด์ด์์ Id๋ฅผ ์ค์ ํ ์ ์์ง๋ง ๋๋ฉ์ธ ๋ ์ด์ด์์๋ ์ค์ ํ ์ ์์ต๋๋ค!
ํ
์คํธ ๋ ์ด์ด์์
์๋ก์ด Telefone().Id = 1; // ์๋!!
UI ๋ ์ด์ด์์
์๋ก์ด Telefone().Id = 1; // ์ปดํ์ผํ์ง ์์ต๋๋ค! ์๋ํ์ง ์์ต๋๋ค!
var pessoa = fix.Build<Pessoa>()
.With(p => p.Nome)
.Do((pess) =>
{
fix.Build<Telefone>()
.With(p => p.Id)
.With(p => p.Tipo)
.With(p => p.Numero)
.OmitAutoProperties()
.CreateMany(10).ToList().ForEach(pess.Telefones.Add);
fix.Build<Email>()
.With(p => p.Id)
.With(p => p.Tipo)
.With(p => p.Endereco)
.OmitAutoProperties()
.CreateMany(10).ToList().ForEach(pess.Emails.Add);
})
.OmitAutoProperties()
.Create();
์ด๋ก ์ ์ผ๋ก ์์ ์ฝ๋๋ ์๋ํด์ผ ํ์ง๋ง ๋ด ๋๋ก ํ ์คํธ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด:
"Id" ์์ฑ์ ์ฝ๊ธฐ ์ ์ฉ์ ๋๋ค.
๋ชจ๋ ์์ฑ Id
์ protected internal
์
๋๋ค.
๋์ผํ ํ์ผ์์ ๋์ผํ ํ ์คํธ๋ ๋ค์๊ณผ ๊ฐ์ ์์ ์ ์ํํ ์ ์์ต๋๋ค.
์๋ก์ด Telefone().Id = 1; // ์๋!!
์ ์ด๋ฉ์ผ().Id = 1; // ์๋!!
์ด๊ฒ์ ๋๋ฉ์ธ ๋ชจ๋ธ์ _๋์ค ์ถ์ํ_๊ฐ ์์์ ๋ถ๋ช ํ ์๋ ค์ค๋๋ค. ๋๋ฉ์ธ ๋ชจ๋ธ์ ํน์ ๊ฒฝ๊ณ ๊ธฐ์ ์ ์ผ๋์ ๋๊ณ ์ค๊ณ๋์ด์๋ ์ ๋ฉ๋๋ค.
์ด ํน์ ๋ฌธ์ ๋ ๋๋ฉ์ธ ๋ชจ๋ธ์ด ์ฌ์ฌ์ฉํ ์ _์๋ค๋ ๊ฒ์ ๋งค์ฐ ๋ช ํํ๊ฒ ์๋ ค์ค๋๋ค.
InternalsVisibleTo
๋ ํ
์คํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ์ก์ธ์ค๋ง ํ์ฉํ๊ธฐ ๋๋ฌธ์ ํจ๊ณผ๊ฐ ์์ง๋ง AutoFixture๋ ์์ ํ ๋ค๋ฅธ ์ด์
๋ธ๋ฆฌ์
๋๋ค. ์ด๊ฒ์ ๋จ์ง _no_ ๋ค๋ฅธ ํด๋ผ์ด์ธํธ๊ฐ ๊ทํ์ ๋๋ฉ์ธ ๋ชจ๋ธ์ ์ฌ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ์๋ ค์ค๋๋ค.
๊ฐ์ฅ ์ข์ ์กฐ์น๋ API ์ค๊ณ๋ฅผ ์ฌ๊ณ ํ๋ ๊ฒ์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ด ํ ๊ฒ์ ๋๋ค.
``` C#
๊ณต๊ฐ ํด๋์ค Telefone : IEntity
{
๊ณต์ค์ ํ(int id)
{
this.Id = ์์ด๋;
}
public virtual int Id { get; private set; }
public virtual string Tipo { get; set; }
public virtual string Numero { get; set; }
}
```
์ด๊ฒ์ ๋ด๊ฐ ๋ฐ๋ฅด๋ ์ํคํ
์ฒ ๊ทธ๋ฃน์์ ๋ง์ ํ ๋ก ์ ์ผ์ผ์ผฐ์ต๋๋ค.
์ด ์ ๊ทผ ๋ฐฉ์์๋ ๋ค์๊ณผ ๊ฐ์ ์ฃผ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
max (id) + 1
์ ๊ฐ์ ์์
์ ์ํํ ๋ค์ ๋ด ๊ฐ์ฒด์ Id๋ฅผ ์ค์ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฝ๊ธฐ ์ ์ฉ์ธ ๊ฒฝ์ฐ ID๋ฅผ ์ด๋ป๊ฒ ์ค์ ํฉ๋๊น?์ด ๋ชจ๋ ๊ฒ์ด _๋ฌธ์ _๋ผ๋ ๋ฐ ๋์ํ์ต๋๋ค. ๋ค ๊ฐ์ง ๋ชจ๋ _strongly_ ๋๋ฉ์ธ ๋ชจ๋ธ์ด ์ง์์ฑ ๊ณ์ธต์ ์์กดํ๋ฉฐ ๊ทธ๊ฒ ์์ด๋ ์๋ํ ์ ์์์ ๋ํ๋ ๋๋ค.
๋ฌธ์ ๋ฅผ ์ดํดํฉ๋๋ค. PK ์ ํ์ Guid๋ก ๋ณ๊ฒฝํ ์ ์์ผ๋ฉฐ ์ค์ ๋ก ์๋ํฉ๋๋ค.
์ด์ ๋ฌธ์ ๊ฐ AutoFixture์ ๊ด๋ จ์ด ์๋ค๋ ๊ฒ์ ์ดํดํ์ง๋ง ๊ด์ฌ์ด ์๋ค๋ฉด. ์ด์ ๋ํด ๋ ผ์ํ๊ธฐ ์ํด ์ํ ํ๋ก์ ํธ ๋ฅผ ๋ง๋ญ๋๋ค.
๊ฐ์ฌ ํด์.